两个非常相似的雷格斯,另一个找不到匹配



我正在尝试从JSON'ish字符串中匹配shortName字段(不再是正确的JSON格式,因此是regex(。在这里运行regex可能不是最有效的方法。我愿意接受建议,但我也想要原始问题的解决方案

我使用Python 2.7和Scrapy,运行PyCharm 2018.2

我想要的:从装满餐馆的巨大JSON'ish文件中获取匹配项,将每个匹配项运行到列表中,迭代列表对象并收集不同的字段数据,我将这些数据设置为变量以备将来使用。不过,我们在这里不会走那么远。

我想匹配shortName字段,并从中提取值/数据。

下面的代码示例从已经接收到巨大文件的地方开始(以unicode或字符串形式(,我们开始匹配餐厅特定的数据字段。在实际模式中,我试图逃离,而不是逃离"one_answers"符号。

我所拥有的:Regex101(下图(

我得到了我试图修复的实际regex,它最终显示为"NoneType没有属性'group'">

请注意,第一行"pattern"有效,它为我带来了开始循环的数据。我不认为问题就在那里

regex = re.compile(pattern, re.MULTILINE)
for match in regex.finditer(r.text):
restaurant = match.group()
restaurant = str(restaurant)
print restaurant
print type(restaurant)
name = re.search(r'(?<=shortName":")(.*?)(?=")',restaurant,re.MULTILINE 
| re.DOTALL).group()

来源样本:

156,"mainGroupId":1,"menuTypeId":1,"shopExternalId":"0001","displayName":"Lorem Ipsum","shortName":"I WANT THIS TEXT HERE","streetAddress":"BlankStreet 5","zip":"1211536","city":"Wonderland",

测试regex,它适用于固定源示例注意:这个源示例的格式是\by regex101,就像我第一次使用"and:escaped with"一样。我直接从他们的代码生成器中复制了这个,但它在代码中确实有效:

testregex = r'(?<=shortName":")(.*?)(?=")'
test_str = (

156,"mainGroupId":1,"menuTypeId":1,"shopExternalId":"0001","displayName":"Lorem Ipsum","shortName":"I CAN GET THIS MATCHED ","streetAddress":"BlankStreet 6","zip":"2136481","city":"Wonderland")
matches = re.search(testregex, test_str, re.MULTILINE | re.DOTALL).group()
print matches
restaurantname = matches

问题是什么:上面的正则表达式打印出"'nonetype'对象没有属性'group'">-错误。下面的正则表达式为我获取所需的数据,在本例中,它会打印出"I CAN GET this MATCHED">

我很清楚可能会有一些小的语法问题,因为我已经尝试解决这个问题一段时间了。

提前谢谢。答案越详细越好。如果你有不同的方法来解决这个问题,请一定要给出代码,这样我就可以从中学习

您的正则表达式与字符串不匹配。输入中没有shopID

您可以使用以下正则表达式通过一个re.findall调用直接获取所有餐厅名称:

shortName":"([^"]+)

请参阅regex演示详细信息

  • shortName":"-文字子字符串
  • ([^"]+)-捕获组1(re.findall调用的结果将是捕获到此组中的子字符串(:除"之外的1个或多个字符

请参阅Python演示:

import re
regex = re.compile(r'shortName":"([^"]+)')
print(regex.findall('156,"mainGroupId":1,"menuTypeId":1,"shopExternalId":"0001","displayName":"Lorem Ipsum","shortName":"I WANT THIS TEXT HERE","streetAddress":"BlankStreet 5","zip":"1211536","city":"Wonderland",'))

最新更新