如何在Python中用regexp解析这个文本文件?

2024-04-20 09:00:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要分析文本文件,其中包含登录名和用户id

+----+---------------+---------------+
| Id | Login         | Name          |
+----+---------------+---------------+
| 1  | admin         | admin         |
| 2  | admin2        | admin2        |
| 3  | ekaterina     | Ekaterina     |
| 4  | commarik      | commarik      |
| 5  | basildrescher | BasilDrescher |
| 6  | danielalynn   | DanielaLynn   |
| 7  | rosez13yipfj  | RoseZ13yipfj  |
| 8  | veolanoyes    | VeolaNoyes    |
| 9  | angel         | Angel         |
| 10 | michalea44    | MichaleA44    |
+----+---------------+---------------+

所以我用re,像这样:

import re
fh = open('test1.txt')
lines = fh.readlines()
for line in lines:
        #print line
        p = re.compile(r"|(.*?)|")
        m2 = p.search(line)
        if m2:
                print m2.group(0)

问题是我不能得到需要的结果!我尝试过空格和制表符的各种组合,但都不起作用。我用split()解决了这个问题,但我仍然想知道我错在哪里。任何帮助都将不胜感激。谢谢您!你知道吗


Tags: 用户reidadminlineloginlinesprint
3条回答

|是正则表达式中的一个特殊字符,用于将两个表达式“或”组合在一起。您需要将其转义为\|,以匹配实际字符。另外,search()将找到一个匹配项。您可能需要查看其他方法,例如findall。你知道吗

您有多个错误:

  • |没有转义
  • 您只有一个组,因此只提取第一列。你知道吗

正则表达式应该是这样的:

\|(.*?)\|(.*?)\|(.*?)\|

您可以看到一个演示here。你知道吗

如果你不希望有花哨的数据,你可以只使用字符和数字。你知道吗

r"([\d\w]+)

下面的示例用法

In [27]: data = """+----+---------------+---------------+
....:     | Id | Login         | Name          |
....:     +----+---------------+---------------+
....:     | 1  | admin         | admin         |
....:     | 2  | admin2        | admin2        |
....:     | 3  | ekaterina     | Ekaterina     |
....:     | 4  | commarik      | commarik      |
....:     | 5  | basildrescher | BasilDrescher |
....:     | 6  | danielalynn   | DanielaLynn   |
....:     | 7  | rosez13yipfj  | RoseZ13yipfj  |
....:     | 8  | veolanoyes    | VeolaNoyes    |
....:     | 9  | angel         | Angel         |
....:     | 10 | michalea44    | MichaleA44    |
....:     +----+---------------+---------------+"""

In [32]: matches = re.findall(r"([\d\w]+)", data)
In [36]: matches
Out[36]: ['Id', 'Login', 'Name', '1', 'admin', 'admin', '2', 'admin2', 'admin2', '3', 'ekaterina', 'Ekaterina', '4', 'commarik', 'commarik', '5', 'basildrescher', 'BasilDrescher', '6', 'danielalynn', 'DanielaLynn', '7', 'rosez13yipfj', 'RoseZ13yipfj', '8', 'veolanoyes', 'VeolaNoyes', '9', 'angel', 'Angel', '10', 'michalea44', 'MichaleA44']

相关问题 更多 >