我正在尝试通过pattern.findall
匹配字符串中的所有模式,但仅部分起作用
码
#--coding:UTF-8 --
import re
import pprint
regex = r"(19|20|21)\d{2}"
text = "1912 2013 2134"
def main():
pattern = re.compile(regex)
print pattern.findall(text)
if __name__ == '__main__':
main()
它打印:
['19', '20', '21']
它应该打印
['1912', '2013','2134']
最佳答案
引用re.findall
文档,
如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。
由于您的原始RegEx具有一个捕获组((19|20|21)
),因此仅返回在该捕获组中捕获的值。你可以这样玩
regex = r"(19|20|21)(\d{2})"
现在我们有两个捕获组(
(19|20|21)
和(\d{2})
)。那么结果将是[('19', '12'), ('20', '13'), ('21', '34')]
要解决此问题,您可以像这样使用non-capturing group
regex = r"(?:19|20|21)\d{2}"
它给出以下输出
['1912', '2013', '2134']
关于python - re.Pattern.findall工作错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23191789/