1

角かっこ内に含まれるパターンに一致する部分文字列を特定した後、いくつかの文字列を抽出して構築したいと思います。

例: テキストが「2 カップ [9 オンス] [10 g] 小麦粉」の場合

この入力から 4 つの文字列を生成したい:

  1. 「2杯」→当方
  2. 「9 オンス」 -> 英国インペリアル
  3. 「10g」→メートル法
  4. 「小麦粉」→原材料名

手始めに、oz キーワードを含む角かっこを特定し始め、次のコードを書きましたが、一致しません。これを達成するためのアイデアやベストプラクティスはありますか?

    p_oz = re.compile(r'\[(.+) oz\]', re.IGNORECASE) # to match uk metric
    text = '2 cups [9 oz] flour'

    m = p_oz.match(text)

    if m:
        found = m.group(1)
        print found
4

2 に答える 2

4

searchの代わりに使用する必要がありますmatch

m = p_oz.search(text)

re.match入力文字列全体を正規表現と照合しようとします。それはあなたが望むものではありません。正規表現に一致する部分文字列を見つけたいのですが、それre.searchが目的です。

于 2012-06-26T16:42:26.033 に答える
1

私はBrenBarnの受け入れられた答えを拡張しているところです。私は昼食時に解決する良い問題が好きです。以下はあなたの質問の私の完全な実装です:

与えられた文字列2 cups [9 oz] [10 g] flour

import re

text = '2 cups [9 oz] [10 g] flour' 

units = {'oz': 'uk imperical', 
         'cups': 'us', 
         'g': 'metric'}

# strip out brackets & trim white space
text = text.replace('[', '').replace(']', '').strip()

# replace numbers like 9 to "9
text = re.sub(r'(\d+)', r'"\1', text)

# expand units like `cups` to `cups" -> us`
for unit in units:
    text = text.replace(unit, unit + '" -> ' + units[unit] + "~")

# matches the last word in the string
text = re.sub(r'(\w+$)', r'"\1" -> ingredient name', text)

print "raw text: \n" + text + "\n"
print "Array:"
print text.split('~ ')

文字列の配列を返します:

raw text:
"2 cups" -> us~ "9 oz" -> uk imperical~ "10 g" -> metric~ "flour" -> ingredient name

Array: [
 '"2 cups" -> us', 
 '"9 oz" -> uk imperical', 
 '"10 g" -> metric', 
 '"flour" -> ingredientname'
]
于 2012-06-26T18:48:36.897 に答える