python - 两个非常相似的正则表达式,其他找不到匹配

标签 python regex python-2.7

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

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

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

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

下面的代码示例从已经收到大文件(unicode 或字符串)的点开始,我们开始匹配餐厅特定的数据字段。在实际的模式中,我尝试转义,而不是转义“和:”符号。

我拥有的: Regex101 (下)

我得到了我正在尝试修复的实际正则表达式,最终结果是“NoneType 没有属性“组””。

请注意,第一行“模式”有效,并为我带来了我开始在 for 循环中遍历的数据。我不认为问题出在这里。

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",

测试正则表达式,适用于固定源示例。 注意:此示例的源示例由 regex101 使用\进行格式化,因为我首先将每个 "和 : 用 转义。 我直接从他们的代码生成器复制了这个,但它确实可以在代码中工作:

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”

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

提前谢谢您。答案越详细越好。如果您对问题有不同的方法,请提供代码,以便我可以从中学习。

最佳答案

您的regex与你的字符串不匹配。输入中没有 shopID

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

shortName":"([^"]+)

请参阅regex demo详细信息

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

参见Python demo :

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",'))

关于python - 两个非常相似的正则表达式,其他找不到匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53115242/

相关文章:

python - Tensorflow numpy 图像 reshape [灰度图像]

python - Pandas : increase speed of rolling window (apply a custom function)

python - SQLAlchemy 加入复合外键(使用 flask-sqlalchemy)

python - xlrd 中的 col 输出似乎是 xf 格式文本。我该如何摆脱这个?

javascript - 文本输入限制在 31(天)以内

C++ 正则表达式转义像 "."这样的标点字符

ruby - 浮点正则表达式?

具有其他含义的 Python 运算符(如打印 V 形)

python-2.7 - PDF 格式的 scikit 学习文档

python - 将手动安装的 OpenSSL 1.1.0e 链接到 python2.7