簡體   English   中英

Python Regex模式findall

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM