8

私は現在、「(」と「)」文字の過度の使用を伴うnooby正規表現パターンを作成しましたが、AまたはBまたはを意味する(A | B | C)などの「または」演算子に使用しています。 C。

文字列内のパターンのすべての一致を見つける必要があります。
このメソッドを使用しようとするre.findall(pattern, text)と、括弧文字がインデックス記号(または正しい専門用語)として解釈されるため、適切ではありません。したがって、生成されるリストの各要素は、一致するテキストセクションを示す文字列ではなく、タプルです。 (パターンマッチの非常に醜いスニペットが含まれています)。

findallインデックスとしてのparanthesisを無視するために渡すことができる引数はありますか?または、と
の非常に醜い組み合わせを使用する必要がありますかre.searchre.sub

(これは私が考えることができる唯一の解決策です。re.searchのインデックスを見つけ、一致したテキストのセクションをリストに追加し、{醜いインデックストリックを使用して}元の文字列から削除し、それ以上なくなるまでこれを続けます明らかに、これは恐ろしくて望ましくありません)。

ありがとう!

4

2 に答える 2

15

はい、?:グループに追加して、キャプチャしないようにします。

import re
print re.findall('(.(foo))', "Xfoo")   # [('Xfoo', 'foo')]
print re.findall('(.(?:foo))', "Xfoo") # ['Xfoo']

詳細については、 re構文を参照してください。

于 2012-08-16T11:03:51.360 に答える
1
re.findall(r"(?:A|B|C)D", "BDE")

また

re.findall(r"((?:A|B|C)D)", "BDE")
于 2012-08-16T11:10:02.217 に答える