我正在研究一个带有正则表达式的程序,我必须过滤它们,但我无法找到它。我想匹配我的字符串中的每个红色,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
我不希望出现“无”结果,如果可能的话,我必须以聪明的方式跳过它们。 谢谢你的帮助!
编辑无引号无效
答案 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