给出以下字符串
s = '"foo" "bar2baz_foo" foo( bar2baz_foo( p_foo p_foo.'
我需要一个正则表达式
re.findall(regex, s)
给出
['foo', 'bar2baz_foo', 'foo', 'bar2baz_foo']
所以它匹配前四个“单词”,不包括引号和括号,但不包括最后两个。 我尝试了几种不同的东西,但我能想出的任何东西都没有用。
希望有人可以提供帮助。
编辑:我应该补充一点,我想用其他内容替换结果而不仅仅是找到它,即我想使用re.sub
而不是re.findall
。字符串也是实际文本文件的内容,因此更长。我刚刚提取了相关的部分。
答案 0 :(得分:0)
如果你不是纯粹的正则表达式解决方案,你可以使用The Greatest Regex Trick Ever。
>>> s = '"foo" "bar2baz_foo" foo( bar2baz_foo( p_foo p_foo.'
>>> import re
>>> filter(None, re.findall(r'p_\w*|(\w+)', s))
['foo', 'bar2baz_foo', 'foo', 'bar2baz_foo']
re.sub
中使用的小型演示:
>>> re.sub(r'p_\w*|(\w+)', lambda m: 'WORD' if m.group(1) else m.group(), s)
'"WORD" "WORD" WORD( WORD( p_foo p_foo.'