2017-09-03 16 views
-1

でそれらを置き換えます。これは、文の中で、ドキュメントのいくつかの回で見ることができパターンのすべての一致を検索し、以下のように私はパターンを持っているテキスト

measurement = re.compile("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)\s*(cm|mm|millimeter|centimeter|millimeters|centimeters)") 

。私はすべての試合を見つけてそれを "MEASUREMENT"に置き換えたいと思っています。その値をリストに追加したいのです。

**Input_Text**: measuring 9 x 5 mm and previously measuring 8 x 6 mm 

**Output**: measuring MEASUREMENT and previously measuring MEASUREMENT 

**List**: 9 x 5 mm, 8 x 6 mm 

これまでのところ私のコードは以下の通りですが、それは最初のマッチもたらします:

result = re.search(measurement, Input_Text) 
        if result: 
         Input_Text = Input_Text.replace(result, "MEASUREMENT") 
+1

're.finditer(pattern、string)';)を使用してください。 –

+1

とにかく 'result'をテキストに置き換えることはできません。それは[一致オブジェクト](https://docs.python.org/3/library/re.html#match-objects)です。 –

+0

なぜ、 'findings_section'変数が別にあるのですか?これは 'Input_Text'と同じですか? –

答えて

1

あなたはすべてマッチした文字列を取得するために、交換用re.sub()、およびre.findall()を使用することができます。

measurement = re.compile("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)\s*(cm|mm|millimeter|centimeter|millimeters|centimeters)") 

text = "measuring 9 x 5 mm and previously measuring 8 x 6 mm" 

values = re.findall(pattern=measurement, string=text) 

sub_text = re.sub(pattern=measurement, string=text, repl='MEASUREMENT') 

>>> sub_text 
'measuring MEASUREMENT and previously measuring MEASUREMENT' 

>>> values 
[('9', '5', 'mm'), ('8', '6', 'mm')] 
1

あなたが二回あなたの文字列を解析したくない場合は、交換用のパラメータとして機能してre.subを使用することができます。この関数を使用すると、一致する文字列のリストを簡単に取り込むことができます。

pat = re.compile(r'\d+(?:\.\d*)?\s*x\s*\d+(?:\.\d*)?\s*(?:cm|mm|millimeters?|centimeters?)') 

s = r'measuring 9 x 5 mm and previously measuring 8 x 6 mm' 

l = [] 

def repl(m): 
    l.append(m.group(0)) 
    return 'MEASUREMENT' 

s = pat.sub(repl, s) 
関連する問題