簡體   English   中英

在python中使用正則表達式查找字符串

[英]Using regex in python to find a string

我試圖找到一個字符串s的子字符串,從{{Infobox}}結束。 我嘗試使用正則表達式執行此操作,但未得到任何結果。 我認為錯誤在於我的正則表達式,但是由於我對regex不熟悉,所以我希望有人可以對此提供幫助。 字符串s例如:

s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

result = re.search('(.*)\{\{Infobox (.*)\}\}(.*)', s)
if result:
    print(result.group(2))

由於定界符不是一個符號的定界符,因此可以使用惰性點匹配 ,並將所需的信息捕獲到第1組中:

import re
p = re.compile(r'\{\{Infobox\s*(.*?)}}')
test_str = "{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}"
match = p.search(test_str)
if match:
    print(match.group(1))

IDEONE演示

如果使用否定的字符類,則信息框內的任何{}都將阻止匹配整個子字符串。

另外,由於您似乎不需要子字符串的前后,因此根本不需要匹配(或捕獲)它們(因此,我刪除了它們)。

碼:

import re
s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

result = re.search(r'(.*){{Infobox ([^}]*?)}}(.*)', s)
if result:
    print(result.group(2))

輸出:

persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG

注意 :上面的正則表達式將匹配,直到遇到{{Infobox }之后的第一個}

重要的提示:

這僅適用於給定樣本輸入的情況

如果輸入之間有一個}ie){{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| }afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}} ie){{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| }afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}} ie){{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| }afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}} 對於這種情況,stribizhev的回答是最好的解決方案

s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

# start with Infobox and two chars before, grab everything but '}', followed by two chars
mo = re.search(r'(..Infobox[^}]*..)',s)


print(mo.group(1))


# {{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}

暫無
暫無

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

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