如何在不制作组的情况下使用圆括号?
问题描述:
我想使用圆括号来使用逻辑运算符,但是没有进行匹配组。如何在不制作组的情况下使用圆括号?
我将用一个例子说明:
/(synn|pack)\sRim.*?vert(\s\d*cm|\d*cm)/
第一组是(synn|pack)
。我怎样才能使它OR
没有成为一个组,所以比在这个正则表达式我只有一个组(\s\d*cm|\d*cm)
?
答
您应该使用一个非捕获组。如果组的开头部分后面的第一个字符是?:
,那么该组不会被捕获。所以在这个例子中,你可以用(?:synn|pack)
代替(synn|pack)
组。
下面是与Python的图示(在.groups
属性计算正则表达式多少组有):
>>> import re
>>> re.compile(r'(synn|pack)\sRim.*?vert(\s\d*cm|\d*cm)').groups
2
>>> re.compile(r'(?:synn|pack)\sRim.*?vert(\s\d*cm|\d*cm)').groups
1
谢谢你的回答! – Src
可以请你告诉我如何在“OR”成为第一组之后让每个组成员。 '?(?: - (\ d *)| \ s(\ d *)|(\ d *))cm'' - 这里我有3组 – Src
@Src:什么是正则表达式?你所要求的在某些语言中是不可能的。 (顺便说一句,上面的例子可以写成'[ - \ s]?(\ d *)') –