python正则表达式只应用一个rep

2024-04-26 14:39:27 发布

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

我正在使用fileinput编辑一个文件,如下所示

for line in fileinput.input():

    line = re.sub(pattern1, repl1, line)
    line = re.sub(pattern2, repl2, line)
    print(line, end="")

我只想为每行应用一次re.sub。如果第一个模式匹配并被替换,我不需要检查模式2

我该如何编纂它


Tags: 文件inre编辑forinputline模式
2条回答

您可以使用re.search预先检查pattern1是否存在,然后基于此做出决定:

for line in fileinput.input():

    if re.search(pattern1, line):
        line = re.sub(pattern1, repl1, line)
    else:
        line = re.sub(pattern2, repl2, line)

    print(line, end="")

使用re.subn,它返回文本和所做的sub的数量

for line in fileinput.input():

    line, n = re.subn(pattern1, repl1, line)
    if not n:
        line, n = re.sub(pattern2, repl2, line)
    if not n:
        line, n = re.sub(pattern3, repl3, line)

    ...

    print(line, end="")

或者如果你有很多模式:

for line in fileinput.input():

    for pattern in patterns:
        line, n = re.subn(pattern, repl1, line)

        if n:
            break

    print(line, end="")

相关问题 更多 >