2016-09-28 62 views
-1

使用https://regex101.com/正则表达式来解析出一定的价值,我想

  • 我目前正则表达式表达:^.*'(\d\s*.*)'*$

这似乎并不奏效。什么是我应该使用的正确组合公式?

我希望能够解析出变量即 项目,数量,成本和总

我的代码:

import re 

str = "xxxxxxxxxxxxxxxxxx" 
match = re.match(r"^.*'(\d\s*.*)'*$",str) 
print match.group(1) 
+1

什么问题?备注:你的测试字符串不是字符串,而是字符串列表 – Tryph

+0

问题是我应该用什么正则表达式解析出上述4个值 – user2947950

回答

1

下面的正则表达式的每一种成分的字符串匹配和商店希望信息分组:r'^(\d+)\s+([A-Za-z ]+)\s+(\d+(?:\.\d*))$'

它定义了3个组,每个组之间用空格隔开:

  • ^标记字符串开始
  • (\d+)是第一组和查找至少一个数字
  • \s+是组之间的第一分离,并查找至少一个白色字符
  • ([A-Za-z ]+)是第二组,并寻找至少一个字母字符或空格
  • \s+是组间的第二次分隔,并寻找至少一个白色字符
  • (\d+(?:\.\d*)是第三组并寻找至少一个数位与最终小数点和其他一些数字
  • $标记字符串端

甲正则表达式来获得总不需要进行说明我认为。

以下是使用测试数据的测试代码。是应该是一个很好的起点:

import re 

TEST_DATA = ['Table: Waiter: kenny', 
      '======================================', 
      '1 SAUSAGE WRAPPED WITH B 10.00', 
      '1 ESCARGOT WITH GARLIC H 12.00', 
      '1 PAN SEARED FOIE GRAS 15.00', 
      '1 SAUTE FIELD MUSHROOM W 9.00', 
      '1 CRISPY CHICKEN WINGS 7.00', 
      '1 ONION RINGS 6.00', 
      '----------------------------------', 
      'TOTAL 59.00', 
      'CASH 59.00', 
      'CHANGE 0.00', 
      'Signature:__________________________', 
      'Thank you & see you again soon!'] 

INGREDIENT_RE = re.compile(r'^(\d+)\s+([A-Za-z ]+)\s+(\d+(?:\.\d*))$') 
TOTAL_RE = re.compile(r'^TOTAL (.+)$') 

ingredients = [] 
total = None 
for string in TEST_DATA: 
    match = INGREDIENT_RE.match(string) 
    if match: 
     ingredients.append(match.groups()) 
     continue 
    match = TOTAL_RE.match(string) 
    if match: 
     total = match.groups()[0] 
     break 

print(ingredients) 
print(total) 

此打印:

[('1', 'SAUSAGE WRAPPED WITH B', '10.00'), ('1', 'ESCARGOT WITH GARLIC H', '12.00'), ('1', 'PAN SEARED FOIE GRAS', '15.00'), ('1', 'SAUTE FIELD MUSHROOM W', '9.00'), ('1', 'CRISPY CHICKEN WINGS', '7.00'), ('1', 'ONION RINGS', '6.00')] 
59.00 

编辑Python的原始字符串:

一个Python字符串前r字符表明它是一个原始字符串,这意味着特殊字符(如\t,\n等)不被解释。

要清楚,例如,在标准字符串\t是一个制表符。它是一个原始字符串,它是两个字符:\t

r'\t'相当于'\\t'

more details in the doc

+0

我自己解决了TOTAL。我有一个问题要问! 'textwordfortransaction = str(transaction) totalprinter = re.search(r“\ bTOTAL \ b \ s *(\ d *)。”,textwordfortransaction)print totalprinter.group(1)'why is r“\ ... needed ?我删除了r“并且它不起作用 – user2947950

+0

在编辑时回答了您的附加问题。 – Tryph