[英]Python Regex pattern findall
下面的reg表达式
get_tags = lambda t: re.findall(r"<(.+)>", t)
st = "xyx<ab>xy x<bc> xyx<cd>xyxy xx<de> xyx <ef>x y<fg><gh>y"
print(get_tags(st))
预期输出为
['ab', 'bc', 'cd', 'de', 'ef', 'fg', 'gh']
即使模式不是贪婪的(不使用'*'吗?),表达式也会给出输出
['a>xyx<b>xyx<c>xyxyxx<d>xyx<e>xy<f><g']
模式有什么问题?
.+
默认是贪婪的。 您需要添加?
勉强的量词旁边的+
做非贪心匹配。
get_tags = lambda t: re.findall(r"<(.+?)>", t)
要么
get_tags = lambda t: re.findall(r"<([^<>]+)>", t)
[^<>]+
否定的字符类,与任何字符匹配,但不匹配>
或<
一次或多次。
>>> get_tags = lambda t: re.findall(r"<(.+?)>", t)
>>> st = "xyx<ab>xy x<bc> xyx<cd>xyxy xx<de> xyx <ef>x y<fg><gh>y"
>>> print(get_tags(st))
['ab', 'bc', 'cd', 'de', 'ef', 'fg', 'gh']
>>> get_tags = lambda t: re.findall(r"<([^<>]+)>", t)
>>> print(get_tags(st))
['ab', 'bc', 'cd', 'de', 'ef', 'fg', 'gh']
由于您知道只能找到< >
之间的字母,因此您也可以使用
get_tags = lambda t: re.findall(r"<(\w+)>", t)
作为正则表达式。 只会在< >
之间搜索[A-Za-z]
,因为示例中括号之间存在一些空格。 这也可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.