попробовать:
a ('(.+)'|"(.+)"|(\B+))
Заменено:
b $2$3$4
Да, как ни странно Python, кажется, не любят пустых групп перехвата. Насколько мне известно, большинство реализаций регулярных выражений не имеют проблемы. Вы всегда можете сделать это в два этапа, хотя:
temp = re.sub(r"a (['\"])(.*)\1",r"b \2", string)
return re.sub(r"a (\w*)",r"b \1", temp)
Или три:
temp = re.sub(r"a (\"(.*)\"",r"b \1", string)
temp = re.sub(r"a ('(.*)'",r"b \1", temp)
return re.sub(r"a (\w*)",r"b \1", temp)
Вы можете также отказаться от использования sub
, и строить выход из группы самостоятельно, что-то вдоль линий:
regex = re.compile(r"^a (([\"'])(.*)\2.*|(\w*).*)$",re.MULTILINE)
matches = re.finditer(regex,string)
for match in matches:
if match.group(3) is not None:
print 'b {0}'.format(match.group(3))
elif match.group(4) is not None:
print 'b {0}'.format(match.group(4))
'' Это забавная вещь о струнах, - сказал он. «Они могут включать« цитаты »в кавычки!» ' – 2013-04-10 22:08:45
' .replace (/ a ['"]? Foo \ b /,' b foo ')' – Aust
@JackManey Не эти. @ Aust Я не уверен как это работает с критериями – user1277170