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