[英]Why doesn't the regex match when I add groups?
我在python中有這個正則表達式代碼:
if re.search(r"\{\\fad|fade\(\d{1,4},\d{1,4}\)\}", text):
print(re.search(r"\{\\fad|fade\((\d{1,4}),(\d{1,4})\)\}", text).groups())
text
是{\\fad(200,200)}Épisode 101 : {\\i1}The Ghost{\\i0}\\Nv. 1.03
{\\fad(200,200)}Épisode 101 : {\\i1}The Ghost{\\i0}\\Nv. 1.03
並從文件中讀取(不知道是否有幫助)。
這將返回以下內容:
(None, None)
當我將打印中的正則表達式更改為r"\\{\\\\fad\\((\\d{1,4}),(\\d{1,4})\\)\\}"
,它返回正確的值:
(200, 200)
任何人都可以看到為什么條件fad|fade
與re.search
中的正則表達式匹配但是沒有返回打印中組的正確值?
謝謝。
在選擇周圍添加額外的parens: re.search(r"{(?:\\\\fad|fade)\\((\\d{1,4}),(\\d{1,4})\\)}", text).groups()
此外,沒有必要轉義{}
括號,它只是不必要地混亂你的正則表達式。
括號是從淡入淡出開始的分支或分支的一部分,所以它正在尋找“{fad”或“fade(...”。你需要將時尚|淡化部分組合在一起。嘗試:
r"\{\\(?:fad|fade)\(\d{1,4},\d{1,4}\)\}"
[編輯]你進入if塊的原因是因為正則表達式是匹配的,但只是因為它檢測到它以“{\\ fad”開頭。 但是,該部分匹配不包含任何組。 如果要捕獲它們,則需要與定義組的部件匹配。
嘗試這個:
r"\{\\fade?\(\d{1,4},\d{1,4}\)\}"
我認為你的條件是尋找“\\ fad”或“fade”,我認為如果你想尋找“\\ fad”或“\\ fade”,你需要在分組之外移動\\。
試試這個:
r"\{\\fade?\((\d{1,4}),(\d{1,4})\)\}"
e?
是一個可選的e
。 你擁有它的方式現在匹配{\\fad
或fade(0000,0000)}
我不知道正則表達式的python方言,但你不需要以某種方式“分組”“fad | fade”以確保它不是試圖找到“時尚或淡化(等等......)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.