2016-11-12 10 views
2

「A」、「B」、「C」を返す方法を見つけようとしています。私は、次の正規表現を使用してみました複数のマッチグループを返す

:stringの

{{(?:\|\[\[([a-zA-Z\s]+)+\]\])+}} 

{{|[[A]]|[[B]]|[[C]]}} 

しかし、これまでほとんど成功。

多くのありがとうございます。

+0

私は文字列だけでなく、文字列全体を返すことがわかります。あなたは手紙を返事しますか? – BlackHatSamurai

+1

あなたは['\ | \ [\ [([a-zA-Z \ s] +)\] \]'](https://regex101.com/r/IBfGo6/1)を必要とし、複数のマッチを取得します。あなたが使っているプログラミング言語は何ですか? '([a-zA-Z \ s] +)+'は明らかに人為的なエラーであることに注意してください。すでにグループ化されている単一の原子を持つグループを定量化することはできません。 –

+0

文字列が{{[[A]] | [[B]] | [[C]]}}の場合はどうなりますか? – user3287037

答えて

2

注意を([a-zA-Z\s]+)+は明らかに人為的ミスであること - が存在していませんすでに+ - 定量されている単一の原子を有するグループを定量化することを指す。

あなたはあなたの少しの固定正規表現とだけアクセスグループ1 captures使用することができますは、PyPIの正規表現モジュールを使用することができた場合:

エルス
>>> import regex 
>>> pat = r"{{(?:\|\[\[([a-zA-Z\s]+)]])+}}" 
>>> s = "{{|[[A]]|[[B]]|[[C]]}}" 
>>> res = regex.fullmatch(pat, s) 
>>> print(res.captures(1)) 
['A', 'B', 'C'] 

を、あなたは2段階のアプローチを使用する必要があります:1の場合)をチェック文字列全体が必要なパターンと一致し、2)\|\[\[([a-zA-Z\s]+)]]re.findallを使用すると、複数の一致が必要になります。

>>> res = [] 
>>> if re.search(r"^{{(?:\|\[\[([a-zA-Z\s]+)]])+}}$", s): 
    res = re.findall(r"\|\[\[([a-zA-Z\s]+)]]", s) 
>>> print(res) 
['A', 'B', 'C'] 
+1

完璧、ありがとう。 – user3287037

1

それぞれに手紙を収容するための最初のグループを見つけると一致する場合には、(繰り返しなし)正規表現\|\[\[[a-zA-Z\s]+\]\]を使用して複数の一致を探します。http://regexr.com/3eksj

+0

新規内容... {{[[A]] | [[B]] | [[C]]}}などの文字列から角括弧内のコンテンツを抽出しようとしていますその文字列がそのパターンに従っていることを検証しながら。 – user3287037

+0

@bobblebubble固定tnx、ちょうど元を取った – Uriel