2

私はこれらの2つの可能性の1つに一致するこの正規表現を持っています:

(\b(Q|L[A-Z])\d{8}\b)

# Possibilities
LK10652174
Q10652174

これで、結果は次のようになります。

>>> regex.findall(string)
[(u'LK10652175', u'LK')]

余分な一致を選択したくないのですが、この余分な選択を取得せずにステートメントLKをカプセル化する方法はありますか?OR

4

3 に答える 3

1

はい、キャプチャしない括弧を使用します(そして、最も外側の括弧を削除します。それらは必要ありません):

\b(?:Q|L[A-Z])\d{8}\b
于 2012-08-14T21:38:04.163 に答える
1

いつものように、(?:...)一致しますが、キャプチャしません。

(\b(?:Q|L[A-Z])\d{8}\b)
于 2012-08-14T21:38:15.223 に答える
-1

Pythonドキュメントから:

1つのパターンが完全に一致すると、そのブランチが受け入れられます。これは、Aが一致すると、全体的な一致が長くなったとしても、Bはそれ以上テストされないことを意味します。言い換えれば、「|」オペレーターは決して貪欲ではありません。

これは、一致が意図した文字列全体であることを確認するために、次のように記述する必要があることを意味します。

import re
a = re.compile("(Q\\d{8}|L[A-Z]\\d{8})")
print a.findall("LK10652174 Q10652174")
['LK10652174', 'Q10652174']
于 2012-08-14T22:03:15.710 に答える