在逗号和关键字正则表达式列表之间查找单词
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。
我有一个大文本。我想找到所有者的地址。我的输入类似于...
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。