Python:如何在使用正则表达式时跳过包含额外字符的行?

2024-09-26 17:59:37 发布

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

使用正则表达式时,如何从感兴趣的文本后没有额外文本的行中只选择文本?在

对于下面的输入文本,我只想选择string1到string10,并跳过在同一行有“blah”的字符串。在

输入文本文件:

[random lines of text]
DATE/USER: 07/01/15   string1
[random lines of text]
DATE/USER: 07/12/15   string2
[random lines of text]
DATE/USER: 07/04/15   string3
[random lines of text]
DATE/USER: 07/12/15   string4
[random lines of text]
DATE/USER: 07/05/15   string5      * blah1 *
[random lines of text]
DATE/USER: 07/02/15   string6
[random lines of text]
DATE/USER: 07/08/15   string7
[random lines of text]
DATE/USER: 07/11/15   string8      * blah2 *
[random lines of text]
DATE/USER: 07/03/15   string9
[random lines of text]
DATE/USER: 07/10/15   string10      * blah3 *
[random lines of text]

我的当前代码:

^{pr2}$

输出:

string1
string2
string3
string4
string5      * blah1 *
string6
string7
string8      * blah2 *
string9
string10      * blah3 *

同样,只想抓住绳子,跳过那些在同一行有“废话”的。我的输出应该排除string5、string8和string10。在

编辑:道歉。做了一些修改来完善我的要求。在


Tags: oftext文本daterandomlinesuserstring1
3条回答
re.findall('DATE/USER: \d\d/\d\d/\d\d\s+([A-Z])', line)

根据您的编辑,您完全可以拆分:

with open("in.txt") as f:
    for line in f:
        if line.startswith("DATE/USER:"):
            spl = line.split()
            if len(spl) == 3:
                print(spl[2])

输出:

^{pr2}$

使用re:

with open("in.txt") as f:
    import re
    r = re.compile(r'(^DATE/USER:\s+\d+/\d+/\d+\s+(\w+$))')
    for line in f:
        match = r.search(line)
        if match:
           print(match.group(2))

输出:

^{pr2}$

下面的“$”实际上将排除后面有*blah*的任何行:

rphfind = re.findall('(?<=DATE/USER: \d\d/\d\d/\d\d)\s+([A-Z])$', line)

只匹配A,B,C,D,F,G,I

capture组([A-Z])将只获取单个大写字母,但仍允许任何行匹配(在示例中打印A到J)

^{pr2}$

不知道你在找哪个版本

相关问题 更多 >

    热门问题