以下のようなテキストを含むテキストファイルがあります
Format={ Window_Type="Tabular", Tabular={ Num_row_labels=10 } }
テキスト ファイルで Num_row_labels >=10 を探す必要があります。Python 3.2 正規表現を使用してそれを行うにはどうすればよいですか? ありがとう。
以下のようなテキストを含むテキストファイルがあります
Format={ Window_Type="Tabular", Tabular={ Num_row_labels=10 } }
テキスト ファイルで Num_row_labels >=10 を探す必要があります。Python 3.2 正規表現を使用してそれを行うにはどうすればよいですか? ありがとう。
データが上記のようにフォーマットされており、数値の先頭に 0 がないものとします。
Num_row_labels=\d{2,}
任意のスペースを許可するよりリベラルな正規表現ですが、先頭に 0 がないことを前提としています。
Num_row_labels\s*=\s*\d{2,}
任意のスペースを許可し、先頭に 0 を許可するさらにリベラルな正規表現:
Num_row_labels\s*=\s*0*[1-9]\d+
数値をキャプチャする必要がある場合は、\d{2,}
(1 番目と 2 番目の正規表現で) または[1-9]\d+
(3 番目の正規表現で) を括弧で囲み()
、1 番目のキャプチャ グループで参照します。
使用する:
match = re.search("Num_row_labels=(\d+)", line)
は(\d+)
少なくとも 1 つの 10 進数 (0 ~ 9) に一致し、一致したすべての数字をグループとしてキャプチャします (グループは、ここで割り当てているre.search
andによって返されるオブジェクトに格納されます)。グループにアクセスして と比較するには、次を使用します。re.match
match
10
if int(match.group(1)) >= 10:
print "Num_row_labels is at least 10"
これにより、正規表現ですべてを行う回答とは異なり、しきい値の値を簡単に変更できます。さらに、これは、正規表現のゼロ以外の数字の後に少なくとも 1 つの他の数字が続くのではなく、値を 10 と比較していることが非常に明白であるため、より読みやすいと思います。上記のコードは、一致した最初のグループを要求し (match.group(1)
によって一致した文字列を返します\d+
)、 を呼び出してint()
、文字列を整数に変換します。によって返された整数は、int()
10 と比較されます。
re は次のようになります。
Num_row_labels=[0-9]*[1-9][0-9]+
使用例:
if re.search('Num_row_labels=[0-9]*[1-9][0-9]+', line):
print line
正規表現[0-9]*[1-9][0-9]+
は、文字列内に少なくとも
[1-9]
, 正規表現のシンボル クラス[]
は、括弧内に指定された範囲の任意のシンボルを使用できることを意味します);[0-9]+
、+
正規表現の記号は、その前にある記号/式が 1 回以上繰り返されることを意味します)。これらの数字の前に、他の任意の数字を指定できます ( [0-9]*
、つまり任意の数字、0 回以上)。すでに 2 桁の数字がある場合は、その前に他の数字を使用できます — いずれにせよ、数字は 10 以上になります。
正規表現はNum_row_labels=[1-9][0-9]{1}.*
これで、re
python モジュール (ここを見てください)を使用して、テキストを分析し、それらを抽出できます。