文字の一部が一致する場合、中括弧(中括弧を含む)の間の文字をキャプチャしようとしています。
以下の正規表現パターンを試しましたが、文字列全体の最初のカーリーブラケットから最後のカーリーブラケットまですべてを取得します。
string = "The {name_of_list} list contains {list:a, b, and c}. This list should be formatted as a, b, and c."
r"(\{.*?:a, b, and c\})"gm
「{list:a、b、c}」をキャプチャしたいのですが、代わりに「{name_of_list}リストに{list:a、b、c}が含まれています」というメッセージが表示されます。
.
パターンを使用すると、予期しない結果を得る理由がある、任意の文字が、改行文字と一致します。
必要なものと一致させるには、ドットを「テンパリング」する必要があります。ここでは、否定された文字クラス[^{]
(any char but {
)または[^{}]
(any char but {
and }
)を使用するのが最適です。
import re
s = "The {name_of_list} list contains {list:a, b, and c}. This list should be formatted as a, b, and c."
print(re.findall(r'\{[^{}]*?:a, b, and c}', s))
正規表現のデモとPythonのデモをご覧ください。
を含む中括弧内の文字列を一致させるには:
、次を使用できます。
r'\{[^{}:]*:[^{}]*}'
:
貪欲な*
数量詞を使用して効率を高めることができる、最初の否定文字クラスに含まれているものを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加