Python суббукв регулярного выражения, не заключенных в кавычки, и если они не совпадают со спецификациями c слово, включая группу / совпадение регулярного выражения - PullRequest
2 голосов
/ 27 мая 2020

Мне нужны дополнительные буквы, не заключенные в кавычки, а не если они соответствуют слову TODAY с конкретной строкой, часть которой включает группу совпадений, например

import re
import string

s = 'AB+B+" HELLO"+TODAY()/C* 100'
x = re.sub(r'\"[^"]*\"|\bTODAY\b|([A-Z]+)', r'a2num("\g<0>")', s)

print (x)

ожидаемый результат:

'a2num("AB")+a2num("B")+" HELLO"+TODAY()/a2num("C")* 100'

фактический результат:

'a2num("AB")+a2num("B")+a2num("" HELLO"")+a2num("TODAY")()/a2num("C")* 100'

Я почти готов, но он не подчиняется правилам цитат или правилу TODAY слов, я знаю, что строка не имеет никакого смысла, но это просто хард sh тест регулярного выражения

1 Ответ

4 голосов
/ 27 мая 2020

Ваш подход к регулярному выражению правильный, но вам нужно использовать лямбда-функцию в re.sub

>>> s = 'AB+B+" HELLO"+TODAY()/C* 100'
>>> rs = re.sub(r'"[^"]*"|\bTODAY\b|\b([A-Z]+)\b',
...     lambda m: 'a2num("' + m.group(1) + '")' if m.group(1) else m.group(), s)
>>> print (rs)

a2num("AB")+a2num("B")+" HELLO"+TODAY()/a2num("C")* 100

Демо-код

...