re.findall return 单独的非重叠结果
re.findall return separate non-overlapping results
我是 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>']
我是 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>']