import re
with open("input") as f:
for line in f:
mo=re.match(r'[^\d]*(\d+).*?(tons|feet|lbs)', line)
if mo: print mo.group(1), mo.group(2)
出力
1023 lbs
1023 tons
1023 feet
また、 のような行がある場合は、次のよう$100 money is too much for 100 lbs
に使用できます。
import re
with open("input") as f:
for line in f:
mo=re.match(r'.*?(?<![$\d])(\d+).*?(tons|feet|lbs)', line)
if mo: print mo.group(1), mo.group(2)
そして、キロ、メガのものを一致させるために:
import re
with open("input") as f:
for line in f:
mo=re.match(r'.*?(\d+).*?(mega|kilo|metric|) (tons|feet|lbs)', line)
if mo: print mo.group(1), mo.group(2), mo.group(3)
出力
1023 mega lbs
1023 kilo tons
1023 feet
100 lbs
これらの単位と修飾子をリストに保存し、それらを結合して|
その場で正規表現を作成することができます。
可能なすべてのユニット修飾子に一致する例:
import re
with open("input") as f:
for line in f:
mo=re.match(r'[^\d]*(\d+).*?(\S*)\s*(tons|feet|lbs)', line)
if mo: print "'{}' '{}' '{}'".format(mo.group(1), mo.group(2),
mo.group(3))
出力
'1023' 'mega' 'lbs'
'1023' 'kilo' 'tons'
'1023' '' 'feet'