2017-02-03 5 views
1

論理演算子の使用には丸括弧を使用したいが、マッチングのためのグループを作成する必要はない。グループを作成せずに丸括弧を使用するにはどうすればよいですか?

私は例を挙げて説明します:

/(synn|pack)\sRim.*?vert(\s\d*cm|\d*cm)/ 

最初のグループは(synn|pack)あります。どのように私はそれをグループ化せずにORにすることができますので、この正規表現では1グループしか持たないでしょう(\s\d*cm|\d*cm)

答えて

2

非キャプチャグループを使用する必要があります。グループの開始括弧の後の最初の文字が?:の場合、そのグループは取得されません。つまり、この例では、(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:正規表現の味は何ですか?あなたが求めるものは、いくつかの言語では不可能です。 (BTW、上の例は '[ - \ s]?(\ d *)'と書くことができます) –

関連する問題