regex - 查找逗号和关键字列表之间的单词 RegEx
问题描述
我有一个大文本。我想找到楼主的地址。我的输入类似于...
输入:(...) seiscientos catorce guión ocho, domiciliado en calle Santillana número trescientos sesenta y nueve, Valle Lo Campino, comuna de Quilicura, Región Metropolitana, constituyeron una sociedad por acciones (...)
keywords_cap = ['DOMICILIO:', 'Domicilio:', 'Domicilio', 'DOMICILIO', 'domiciliado en', 'domiciliada en',
'Domiciliado en', 'Domiciliada en']
keywords_cap = map(re.escape, keywords_cap)
keywords_cap.sort(key=len, reverse=True)
obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(keywords_cap)))
obj2 = obj.search(mensaje)
if obj2:
company_name = obj2.group(1)
else:
company_name = "None"
输出: calle Santillana número trescientos sesenta y nueve
出了点问题,因为我想提取关键字的一个单词和下一个逗号 (,) 或下一个点 (.) 之间的文本。
但是被提取是因为这个关键字列表只到了下一个点(.)。
有人可以帮我解决这个愚蠢的问题吗?
解决方案
该(.*?)\.
模式匹配除换行符之外的任何字符,在最左边的字符之前尽可能少.
。它可以“转换”为([^.]*)
,一个匹配 0 个或更多字符的否定字符类.
模式(请注意,与原始模式的唯一区别是否定字符类也匹配换行符,这在这种情况下是一个很好的特性)。
解决方案是添加,
到字符类中:
obj = re.compile(r'\b(?:{})\s*([^.,]*)'.format('|'.join(keywords_cap)))
^^^^^^^^
正则表达式看起来像
\b(?:DOMICILIO:|Domicilio:|Domicilio|DOMICILIO|domiciliado en|domiciliada en|Domiciliado en|Domiciliada en)\s*([^.,]*)
请参阅正则表达式演示。
推荐阅读
- ios - 应用程序进入后台后应用程序是否会重新启动
- java - 如何用 Java 编写程序来编译 .asm(汇编语言)文件?
- java - 如何通过 Selenium 在网页中捕获 WebElement 的屏幕截图,而不是整个屏幕或页面
- reactjs - ReactJs -> 使用 .net 框架自动完成文本框
- node.js - 为什么我的应用程序在 docker 容器内运行时侦听端口 80 而不是端口 3000?
- java - 我是否用这个令牌替换代码重新发明轮子?
- mysql - 将 django 与 WSGI 一起使用时导入错误
- ios - 如何在swift4的tableview单元格中使用按钮获取JSON id
- sql - 汽车经销商库存订单清单
- validation - 在 go 中验证 http 请求的惯用方法