Введите метку или, если она не соответствует строке foo - PullRequest
1 голос
/ 09 ноября 2019

Допустим, у меня есть файл вроде:

tata toto
tata titi
tata

Если я делаю регулярное выражение вроде: ^(tata) (toto)?

Я бы хотел, чтобы, если toto был найден \ 2= toto, иначе \ 2 = foo

Итак, я хотел бы получить в выводе:

tata toto
tata foo
tata foo

Возможно ли это с помощью регулярного выражения?

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Один из способов добиться этого - заменить все, что не 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
0 голосов
/ 09 ноября 2019

Вы можете использовать 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 . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...