python中的正则表达式结果过滤器

时间:2011-08-30 19:23:22

标签: python regex

我正在研究一个带有正则表达式的程序,我必须过滤它们,但我无法找到它。我想匹配我的字符串中的每个红色,xxxx或xxxx,红色表达式,并将颜色xxxx放入一个组中。这是我的代码:

string = "blue,red   red,yellow   blue,yellow   red,green   purple red, ..."
regex = re.compile('(?:red,(?P<redfirst>\w+)|(?P<othercolorfirst>\w+),red)')

然后我写道:

for match in regex.finditer(string):
    if match.group('redfirst')!= "None":
        print(match.group("redfirst"))

但我还是得到了印刷品:

None
yellow
green
None

我不希望出现“无”结果,如果可能的话,我必须以聪明的方式跳过它们。 谢谢你的帮助!

编辑无引号无效

3 个答案:

答案 0 :(得分:3)

>>> import re
>>> regex = re.compile('(?:red,(?P<redfirst>\w+)|(?P<othercolorfirst>\w+),red)')

>>> string = "blue,red   red,yellow   blue,yellow   red,green   purple red, ..."

>>> for matches in regex.finditer(string):
...     if matches.group('redfirst'):
...         print matches.group('redfirst')
...
yellow
green
>>>

答案 1 :(得分:2)

当没有匹配的结果不是"None"(字符串),它是None(单例对象)。虽然在条件允许的情况下简单地剥离None周围的引号,但由于多种原因,最好使用... is None,最重要的是它是in the style guide(嘿,一致性获胜 - 通常)它并没有打破一个写得不好的__eq__(这里不是问题而且更多的是偏执狂,但既然没有缺点,为什么不呢?)。

答案 2 :(得分:1)

我会建议这样的事情:

>>> redfirst, othercolorfirst = zip(*(m.groups() for m in regex.finditer(string)))
>>> redfirst
(None, 'yellow', 'green')
>>> othercolorfirst
('blue', None, None)
>>> filter(None, redfirst)
('yellow', 'green')
>>> filter(None, othercolorfirst)
('blue',)
>>> print "\n".join(filter(None, redfirst))
yellow
green