Python Regex排除某些前缀

时间:2017-10-07 15:21:53

标签: python regex python-2.7

给出以下字符串

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。字符串也是实际文本文件的内容,因此更长。我刚刚提取了相关的部分。

1 个答案:

答案 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.'