我想在识别匹配方括号内的模式的子字符串后提取并构造一些字符串:
例如:如果我的文字是'2杯[9盎司] [10克]面粉'
我想从这个输入中生成4个字符串:
- “2杯” - >我们
- “9 oz” - >英国帝国
- “10 g” - >度量
- “面粉” - >成分名称
醇>
作为一个开始,我已经开始识别包含oz关键字的任何方形braquet,并编写了以下代码但是没有发生匹配。有任何想法和最佳实践来实现这一目标吗?
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
答案 0 :(得分:4)
您需要使用search
代替match
。
m = p_oz.search(text)
re.match
尝试将整个输入字符串与正则表达式进行匹配。那不是你想要的。您希望找到与正则表达式匹配的子字符串,这就是re.search
的用途。
答案 1 :(得分: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'
]