在python中,
我必须用(a is b)
替换每个(a,b)
的出现,其中a,b是非空字符串,在字符串s中观察到paranthesis是子字符串的一部分。
我打算使用re
模块..但我仍然坚持如何在替换字符串中保留a,b。我该怎么做?
Ex: "you know that (tiger is animal) and kiwi is bird"
output : "you know that (tiger,animal) and kiwi is bird"
匹配正则表达式是:
r"\([a-z]+\sis\s[a-z]+\)"
答案 0 :(得分:3)
re
是您案例的更好解决方案:
>>> pat_sub = re.compile(r'(?<=\()\s*?(?P<X>[a-z]+)\s*?is\s*?(?P<Y>[a-z]+)\s*?(?=\))')
>>>
>>> pat_sub.sub(r'\g<X>,\g<Y>',s)
'you know that (tiger,animal) and kiwi is bird'
>>>
>>> s
'you know that (tiger is animal) and kiwi is bird'
使用不同的示例查看正则表达式here的突破。
答案 1 :(得分:2)
您可以使用
re.sub(r'(^\([^\s]+)\s+is\s+(.+$)', r'\1,\2', input)
答案 2 :(得分:2)
使用捕获组和反向引用:
re.sub(r"\(([a-z]+)\sis\s([a-z]+)\)", r"(\1,\2)", text)