Python 3.x Python抓取正则表达式(数字旁边的单词)

Python 3.x Python抓取正则表达式(数字旁边的单词),python-3.x,regex,web-scraping,Python 3.x,Regex,Web Scraping,我希望你很好。我想用正则表达式刮取不同的数据:) 下面是json结果 "ingredients": [ "250g de porc h\u00e2ch\u00e9 (le filet mignon c'est vraiment bon)", "1 oignon blanc", "1 carotte", "6 ch

我希望你很好。我想用正则表达式刮取不同的数据:)

下面是json结果

"ingredients": [
            "250g de porc h\u00e2ch\u00e9 (le filet mignon c'est vraiment bon)",
            "1 oignon blanc",
            "1 carotte",
            "6 champignons parfum\u00e9s chinois (pas des champignons noirs)",
            "1poign\u00e9e de vermicelles de riz (cheveux d'ange)",
            "1poign\u00e9e de germes de soja",
            "3 oeufs",
            "2gousses d'ail",
            "Galette de riz vietnamiennes (les grandes)",
            "4cuill\u00e8res \u00e0 soupe de nuoc mam",
            "Poivre"  
你知道我怎样才能分开刮吗 数量(这是数字) 量化(存在时始终坚持数字) 配料的名称

我不知道如何使用正则表达式

感谢您的回复@Ryszard捷克:)这是第一次使用正则表达式。如果我想将分离的数据直接保存在json中:

代码应该是什么样的

#Récupération des ingrédients
            try:    
                ingredients = [item.text.replace("\n", "").strip() for item in soup.find_all("li", {"class": "recipe-ingredients__list__item"}, [re.compile(r'^(?:(\d+)([^\W\d_]*))?(.*)', x), for x in ingredients])]
            except Exception as e:
                ingredients = None
或者我是否需要使用一些模式来应用于配料

使用

import json, re
j="""{"ingredients": [
            "250g de porc h\u00e2ch\u00e9 (le filet mignon c'est vraiment bon)",
            "1 oignon blanc",
            "1 carotte",
            "6 champignons parfum\u00e9s chinois (pas des champignons noirs)",
            "1poign\u00e9e de vermicelles de riz (cheveux d'ange)",
            "1poign\u00e9e de germes de soja",
            "3 oeufs",
            "2gousses d'ail",
            "Galette de riz vietnamiennes (les grandes)",
            "4cuill\u00e8res \u00e0 soupe de nuoc mam",
            "Poivre"]}"""
jsObj = json.loads(j)
print( [re.findall(r'^(?:(\d+)([^\W\d_]*))?(.*)', x) for x in jsObj["ingredients"]] )
输出:

[[('250', 'g', " de porc hâché (le filet mignon c'est vraiment bon)")], [('1', '', ' oignon blanc')], [('1', '', ' carotte')], [('6', '', ' champignons parfumés chinois (pas des champignons noirs)')], [('1', 'poignée', " de vermicelles de riz (cheveux d'ange)")], [('1', 'poignée', ' de germes de soja')], [('3', '', ' oeufs')], [('2', 'gousses', " d'ail")], [('', '', 'Galette de riz vietnamiennes (les grandes)')], [('4', 'cuillères', ' à soupe de nuoc mam')], [('', '', 'Poivre')]]

^(?:(\d+)([^\W\d.]*)?(.*)
表达式可选地匹配一个或多个数字(捕获1)和后面的一个可选字母(捕获2),然后将其余的捕获到捕获3中。

此的示例分解->
数量(这里是数字)量化(当数字存在时始终坚持数字)配料的名称
,handy,是吗?对不起,我不明白你的意思?例如:-250-g-de-porch\u00e2ch\u00e9(le filet mignon c'est vraiment bon)或类似的-3-Null-oeufsece handy的示例,是吗?如果我的答案对您有帮助,请您投票。Thks很多Ryszard:)当我将数据成分保存在json中时,我如何在代码中直接实现它?#Récupération des ingrédients try:contracents=[item.text.replace(“\n”,”).strip(),for item in soup.find_all(“li”,{“class”:“配方-配料表\配料项目”})],例外情况除外,e:配料=None@LouisDsm我认为这是一样的,难道你不能用你代码中的变量替换
x
输入吗?替换
item.text.replace(“\n”,”).strip()
re.findall(r'^(?:(\d+)([^\W\d.]*)?(.*))“,item.text.replace(“\n”,”).strip())
谁知道我可以在哪里学习和创建我的正则表达式(比如生成器?)我还有一些其他json需要更正,只是在数字后面加了一个空格:)和一些没有数字和量化的,类似于“3\u2009\u00be杯水”、“1\u2009\u2153杯生糙米”“,”2丁香大蒜“,”1月桂叶“,”\u00bc茶匙盐“,”4盎司切成薄片的火腿,切碎“,”4盎司马苏里拉奶酪,切碎“,”\u00bc杯切碎的新鲜罗勒“,@LouisDsm你可以用
re.findall(r'^(?(\d+)\s*([^\W\d\]*)))?(.*),item.text.replace(“\n”,“”)。strip())
\s*
匹配零个或多个空白字符。尝试根据字符串生成模式。
[[('250', 'g', " de porc hâché (le filet mignon c'est vraiment bon)")], [('1', '', ' oignon blanc')], [('1', '', ' carotte')], [('6', '', ' champignons parfumés chinois (pas des champignons noirs)')], [('1', 'poignée', " de vermicelles de riz (cheveux d'ange)")], [('1', 'poignée', ' de germes de soja')], [('3', '', ' oeufs')], [('2', 'gousses', " d'ail")], [('', '', 'Galette de riz vietnamiennes (les grandes)')], [('4', 'cuillères', ' à soupe de nuoc mam')], [('', '', 'Poivre')]]