2024-04-20 15:40:03 发布
网友
下面的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))
预期输出为
即使模式不是贪婪的(没有使用“*”),表达式给出输出
['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) >>> 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]之间的[A-Za-z],因为在您的示例中,括号之间有一些空格。这也会起作用。在
[A-Za-z]
默认情况下,
.+
是贪婪的。您需要在+
旁边添加?
不情愿的量词来进行非贪婪匹配。在或者
^{pr2}$[^<>]+
对匹配任何字符但不属于>
或{因为您知道只查找
< >
之间的字母,所以您还可以使用作为正则表达式。这将只搜索
[A-Za-z]
之间的[A-Za-z]
,因为在您的示例中,括号之间有一些空格。这也会起作用。在相关问题 更多 >
编程相关推荐