如何通过方形braquet提取子串并生成子串

时间:2012-06-26 16:39:45

标签: python regex

我想在识别匹配方括号内的模式的子字符串后提取并构造一些字符串:

  

例如:如果我的文字是'2杯[9盎司] [10克]面粉'

     

我想从这个输入中生成4个字符串:

     
      
  1. “2杯” - >我们
  2.   
  3. “9 oz” - >英国帝国
  4.   
  5. “10 g” - >度量
  6.   
  7. “面粉” - >成分名称
  8.   

作为一个开始,我已经开始识别包含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

2 个答案:

答案 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'
]