NEED INSIGHT:使用python,我使用正则表达式来捕获示例餐厅销售数据,以对其进行分类并将其从.pdf转换为



我使用的正则表达式是^s*(d+)s*(([A-Za-z]+s*)+)?(d+)s+(.+?)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)$

解析并分类以下示例数据字符串时"1 NA饮料1100冰茶14.00 3.00 42.00 3.50 0.00 42.00 0.00 0.52 47.09">

输出不正确:当您在将分类数据转换为JSON之前查看它时,您看到'item_category': 'NA BEVERAGE ', 'item_number': 'BEVERAGE ' It should be 'item_category': 'NA BEVERAGE ', 'item_number':'1100'等。

我希望:

{'item_rank': '1', 'item_category': 'NA BEVERAGE ', 'item_number': 'BEVERAGE ', 'item_name': '1100', 'number_sold': 'ICED TEA', 'price_sold': '14.00', 'amount': '3.00', 'tax': '42.00', 'cost': '3.50', 'profit': '0.00', 'food_cost': '42.00', 'precent_sales': '0.00', 'cat_sales': '0.52'}

我多次尝试修复正则表达式,但无济于事。我希望你能解释一下问题所在。

以下是python脚本的逻辑,你可以复制并在你自己的机器上运行:
import re
import json
page_text_str = "   1 NA BEVERAGE 1100 ICED TEA 14.00 3.00 42.00 3.50 0.00 42.00 0.00 0.52 47.09"
sale_line_re = re.compile('^s*(d+)s*(([A-Za-z]+s*)+)?(d+)s+(.+?)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)$')
grouped_data = []
for line in page_text_str.split('n'):
print(line)   
match = sale_line_re.match(line)
if match:
groups = match.groups()
item = {
"item_rank": groups[0],
"item_category": groups[1],
"item_number": groups[2],
"item_name": groups[3],
"number_sold": groups[4],
"price_sold": groups[5],
"amount": groups[6],
"tax": groups[7],
"cost": groups[8],
"profit": groups[9],
"food_cost": groups[10],
"precent_sales": groups[11],
"cat_sales": groups[12]
}
grouped_data.append(item)

for sale in grouped_data:
print(sale)

与其构建一个正则表达式来描述所有的数字等,不如通过数字之间的空格来使用re.split函数,同时忽略单词之间的空格。这个函数返回一个列表,然后你可以遍历它来构建一个JSON。

(?<=d)s|s(?=d)

  • (?<=d)lookbehind:数字后面的所有内容
  • (?=d)向前看:数字之前的所有内容
  • s|s-匹配数字前后的空格。

regex101.com

问题是您正在重复一个捕获组,它将具有上次迭代的组值。

你可以修改(([A-Za-z]+s*)+)?——>((?:[A-Za-z]+s+)+)?

这个改变将:

  • 重复一个非捕获组,所以现在你有整个值在组2

  • 在非捕获组的重复中重复空格字符1+次

    ^s*(d+)s*((?:[A-Za-z]+s+)+)?(d+)s+(.+?)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)s+(d+.d+)$
    

查看此正则表达式演示和Python代码中的更新模式

相关内容

  • 没有找到相关文章

最新更新