[英]Exact search of a string that has parenthesis using regex
我是正則表達式的新手。
我有以下字符串: \n(941)\n364\nShackle\n(941)\nRivet\n105\nTop
從這個字符串中,我想提取Rivet
並且我已經將(941)
作為變量中的字符串。
我的思考過程是這樣的:
(941)
s(941)
之后的字符串是否后跟 \n、后跟一個單詞並以 \n 結尾來過濾結果\n[\w\s\'\d\-\/\.]+$\n
。 我面臨的問題是,由於(941)
中的括號,正則表達式將 941 作為一個組。 在第三步中,正則表達式可能是錯誤的,我可以稍后修復,但第一步我需要幫助來找到第二步(941)
,所以我可以應用第三步。
PS。
(?:...)
, (941){1}
和像這樣\(941\)
的 make 正則表達式文字字符\
沒有有用的結果。 也許我用錯了。只是想知道是否可以使用正則表達式來完成。 雖然它可能對其他人也有用,或者對未來的觀眾來說是一個很好的分享。
謝謝
假設:
嘗試轉義變量並通過 f-string 在正則表達式中使用它:
import re
s = '\n(941)\n364\nShackle\n(941)\nRivet\n105\nTop'
var1 = '(941)'
var2 = re.escape(var1)
m = re.findall(fr'{var2}\n(?!\d+\n)(\w+)', s)[0]
print(m)
印刷:
Rivet
如果變量中的文本應該完全匹配,請在替換到正則表達式時使用re.escape()
將其轉義。
s = '\n(941)\n364\nShackle\n(941)\nRivet\n105\nTop'
num = '(941)'
re.findall(rf'(?<=\n{re.escape(num)}\n)[\w\s\'\d\-\/\.]+(?=\n)', s)
這會將(941)\n
放在后面,因此它不包含在匹配中。 這避免了一場比賽結束時的\n
與下一場比賽開始時的\n
重疊的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.