【发布时间】:2013-06-30 13:52:40
【问题描述】:
如果我有这个字符串:
s = "this, that; talk, love, hate; good, bad, all good."
我想提取由 , ; 分隔的项目或。
所以我想要的结果是:
["this", "that", "talk", "love", "hate", "good", "bad", "all good"]
如果我使用这个 Python 正则表达式:
re.findall(r"([a-z]+[,;.])+", s)
我得到了结果:
['this,', 'that;', 'talk,', 'love,', 'hate;', 'good,', 'bad,', 'good.']
这和我想要的很接近,除了最后一项。
奇怪的是,如果我在第一个方括号中包含一个空格,如:
re.findall(r"([a-z ]+[,;.])+", s)
那么我只得到这个结果:
[' all good.']
但是 findall() 应该找到所有结果,不是吗?有人能解释一下这种奇怪的行为吗?
【问题讨论】:
-
re.split()可能更适合您的用例。 -
感谢您的所有回答,我现在可以解决问题了。但最初我对 findall() 感到困惑,我认为它返回 (xyz)+ 的不同实例,但它实际上试图从最后一个位置“重新”找到模式。我想没有办法重新返回与“+”匹配的所有实例?
标签: python regex match findall