如何在不制作组的情况下使用圆括号?

问题描述:

我想使用圆括号来使用逻辑运算符,但是没有进行匹配组。如何在不制作组的情况下使用圆括号?

我将用一个例子说明:

/(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 

详情请参阅this Stack Overflow question

+0

谢谢你的回答! – Src

+0

可以请你告诉我如何在“OR”成为第一组之后让每个组成员。 '?(?: - (\ d *)| \ s(\ d *)|(\ d *))cm'' - 这里我有3组 – Src

+0

@Src:什么是正则表达式?你所要求的在某些语言中是不可能的。 (顺便说一句,上面的例子可以写成'[ - \ s]?(\ d *)') –