在逗号和关键字正则表达式列表之间查找单词

Find words between comma and list of keywords RegEx

我有一个大文本。我想找到所有者的地址。我的输入类似于...

INPUT: (...) 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"

OUTPUT: calle Santillana número trescientos sesenta y nueve

有点不对,因为我想提取关键字的一个词和下一个逗号(,)或下一个点(。)之间的文本。

但是从这个关键词列表中提取的只是下一个点(.)。

有人可以帮我解决这个愚蠢的问题吗?

(.*?)\. 模式匹配换行符以外的任何字符,在最左边的 . 字符之前尽可能少。它可以是 "converted" 到 ([^.]*),一个 negated character class 匹配除 . 之外的 0 个或多个字符的模式(请注意,与原始模式的唯一区别是否定字符 classes 也匹配换行符,这在这种情况下是一个很好的特性)。

解决方案是将 , 添加到字符 class:

obj = re.compile(r'\b(?:{})\s*([^.,]*)'.format('|'.join(keywords_cap))) 
                              ^^^^^^^^

正则表达式看起来像

\b(?:DOMICILIO:|Domicilio:|Domicilio|DOMICILIO|domiciliado en|domiciliada en|Domiciliado en|Domiciliada en)\s*([^.,]*)

参见regex demo