python - re.findall 返回单独的非重叠结果
问题描述
我是 Python 新手,我在正则表达式方面有点挣扎。如果我有这样的输入:
text = <tag>xyz</tag>\n<tag>abc</tag>
是否可以获得包含以下元素的输出列表:
matches = ['<tag>xyz</tag>','<tag>abc</tag>]
现在我正在使用以下正则表达式
matches = re.findall(r"<tag>[\w\W]*</tag>", text)
但是,我得到的不是一个包含两个元素的列表,而是一个包含整个输入字符串的元素,例如:
matches = ['<tag>xyz</tag>\n<tag>abc</tag>']
有人可以指导我吗?谢谢你。
解决方案
你只需要让你的捕获不贪心。
更改此正则表达式,
<tag>[\w\W]*</tag>
到
<tag>[\w\W]*?</tag>
import re
text = '<tag>xyz</tag>\n<tag>abc</tag>'
matches = re.findall(r"<tag>[\w\W]*?</tag>", text)
print(matches)
印刷,
['<tag>xyz</tag>', '<tag>abc</tag>']
推荐阅读
- regex - 在弹性搜索中似乎忽略了正则表达式查询
- r - 为什么我的日期转换解决方案不再起作用,尽管没有任何变化?
- vba - 从 IE 的下拉列表中选择值 - 该值已被选中,但页面似乎没有注册它 -
- python - Solr:删除id中带有尖括号的文档
- reactjs - 在 componentDidMount 中未收到 React-redux mapStateToProps
- java - 更新 JTextArea 的问题
- arrays - 如何转换 PowerShell 数组以避免 OverloadDefinitions
- c# - GMAail smtp 在另一台 PC 上不起作用
- java - 如何在android中实现searchview过滤器?
- javascript - 如何获取没有空属性的新数组?