どうですか:
import re
s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)
私にとって、これは次のように印刷されます:
cus_Y4o9qMEZAugtnW
への呼び出しre.search(...)
は、正規表現との最初の一致を検出するため[card]
、検索を 2 回繰り返さない限り検出されないことに注意してください。
編集:ここでの正規表現は python raw stringliteralです。これは基本的に、バックスラッシュが特殊文字として扱われず、re.search()
変更されずにメソッドに渡されることを意味します。正規表現の部分は次のとおりです。
\[
[
リテラル文字に一致
(
新しいグループを始める
[A-Za-z0-9_]
任意の文字 (大文字または小文字)、数字、またはアンダースコアに一致する文字セットです
+
前の要素 (文字セット) に 1 回以上一致します。
)
グループを終了します
\]
]
リテラル文字に一致
編集: DK が指摘したように、正規表現は次のように簡略化できます。
m = re.search(r"\[(\w+)\]", s)
は、との設定に依存する\w
のと同じことを意味する特殊なシーケンスであるためです。[a-zA-Z0-9_]
re.LOCALE
re.UNICODE