输入地标,或者如果不匹配foo字符串

时间:2019-11-09 00:21:43

标签: python regex

假设我有一个文件,例如:

tata toto
tata titi
tata

如果我要制作如下正则表达式: ^(tata) (toto)?

我希望如果找到toto \ 2 = toto,否则为\ 2 = foo

所以我想要输出:

tata toto
tata foo
tata foo

使用正则表达式可以吗?

2 个答案:

答案 0 :(得分:1)

一种解决方法是用tata替换toto后跟tata foo以外的任何内容:

import re;

string = '''
tata toto
tata titi
tata
'''

print (re.sub('^tata(?! toto$).*$', 'tata foo', string, 0, re.M))

输出:

tata toto
tata foo
tata foo

答案 1 :(得分:0)

您可以使用re.findall并循环执行您喜欢的任何事情:

import re

string = '''
tata toto
tata titi
tata
'''

expression = r'^(tata) ?(toto)?'

output = ''
for pair in re.findall(expression, string, re.M):
    if pair[1] == '':
        output += pair[0] + ' foo\n'
    else:
        output += pair[0] + ' ' + pair[1] + '\n'

print(output)

输出

tata toto
tata foo
tata foo

如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。