^.*'(\d\s*.*)'*$
似乎不起作用。我应该使用哪种合适的组合公式?
我希望能够解析 4 变量 项目,数量,费用和总计
我的代码:
import re
str = "xxxxxxxxxxxxxxxxxx"
match = re.match(r"^.*'(\d\s*.*)'*$",str)
print match.group(1)
答案 0 :(得分: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
字符表示它是一个原始字符串,这意味着不解释spécial字符(如\t
,\n
等...)。
要清楚,例如,在标准字符串\t
中是一个制表字符。它是一个原始字符串,它有两个字符:\
和t
。
r'\t'
相当于'\\t'
。