2009-04-16 35 views
3

我有这样的正则表达式的代码在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并从文件中读取(不知道有没有什么帮助)。

这将返回以下:

(None, None) 

当我在打印改变正则表达式来r"\{\\fad\((\d{1,4}),(\d{1,4})\)\}",它返回正确的值:

(200, 200) 

任何人都可以看到为什么条件fad|fade正则表达式匹配在re.search但不返回打印中组的正确值?

谢谢。

+0

我会考虑修改您的标题,使得它更。搜索能够, – 2009-04-16 20:46:01

+0

要么我错过了问题的重点,要么所有人都在回答。是不是真正的问题“为什么添加组时,正则表达式不匹配?” – 2009-04-16 20:50:26

+0

标题已更改。感谢您的建议。 – 2009-04-16 21:06:52

回答

6

投入额外的括号:re.search(r"{(?:\\fad|fade)\((\d{1,4}),(\d{1,4})\)}", text).groups()

此外,逃逸{}括号是没有必要的,它只是不必要的杂波您的正则表达式。

1

我认为你的条件是寻找“\ fad”或“淡入淡出”,我认为如果你想寻找“\ fad”或“\ fade”,你需要在分组外部移动一个\。

+0

如果我想寻找“时尚”或“淡入淡出”?有没有像(fad | fade)那样将它分组的方法?我的意思是,我不想在调用.groups()时找到它。我只是想要别人的价值观。 – 2009-04-16 20:48:17

+0

是的,但我认为其他人已经给出了正确的例子,所以我会在我离开时退出......正则表达式的雷区:-) – 2009-04-16 20:53:55

2

试试这个:

​​
4

的支架的一部分,或者分支开始褪色,所以在寻找或者“{时尚”或“变脸(...”你需要组时尚|褪色部分一起尝试:

r"\{\\(?:fad|fade)\(\d{1,4},\d{1,4}\)\}" 

[编辑] 你就进入if块是因为正则表达式匹配,但原因仅仅是因为它检测开头“{\时尚。 “。 H但是,该比赛的这一部分不包含任何组。如果要捕获它们,您需要与定义组的部分相匹配。周围的选择

0

我不知道正则表达式的python方言,但是你不需要为某种方式对“fad | fade”进行“组合”,以确保它没有试图找到“时尚或淡入淡出”等等。 ?..“

1

试试这个:

r"\{\\fade?\((\d{1,4}),(\d{1,4})\)\}" 

e?是一个可选e 的方式你现在匹配{\fadfade(0000,0000)}

相关问题