簡體   English   中英

正則表達式后面的多重正向

[英]Multiple Positive Lookbehind Regex

所以我正在練習我的正則表達式,我遇到了這個

STATE :   TEXAS

我正在積極尋找背后

這是我的正則表達式:

state = re.search(r"(?<=STATE)\s+(?<=:)\s+\w+",str(Text),re.I|re.M)

此正則表達式無法捕獲TEXAS

但是,如果我這樣做:

state = re.search(r"(?<=STATE)\s+:\s+\w+",str(Text),re.I|re.M)

刪除后面的第二個正向外觀將為您提供: TEXAS

但是我要提取的是沒有冒號的TEXAS ,為什么后面的第二張圖無法捕獲TEXAS 以及如何解決?

考慮一下模式的這一部分:

(?<=STATE)\s+(?<=:)

后面的第一眼說要在其前面找到一個帶有“ STATE”的地方。 \\s+表示要匹配一些空格。 后面的第二個后視表示要向后看(以您剛剛匹配的內容)並找到冒號。 這是不可能的,因為您所匹配的只是空格。 您不能回頭尋找比賽期間要消耗的冒號。

表達式中間的后面並不意味着“向前跳過,直到您通過此部分”。 這意味着要回顧已匹配的內容,並查看其是否與lookbehind表達式匹配。 它只能與已經消耗的東西進行匹配(除非它在正則表達式的開頭,在這種情況下它將控制匹配的開始位置),

如果您只想獲取“ TEXAS”,則應將其捕獲到一個組中,然后在進行匹配后提取該組:

>>> data = "STATE :   TEXAS"
>>> re.search("STATE\s+:\s+(\w+)", data).group(1)
'TEXAS'

不要使用向前/向后看; 使用組代替。 (我真的希望當我第一次學習正則表達式時有人告訴我這個!):

re.search('STATE\s+:\s+(\w+)', "STATE :   TEXAS").group(1)
Out[145]: 'TEXAS'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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