在(:或,或;)之间提取文本文件中的名称用python中的regex

2024-06-01 13:14:21 发布

您现在位置:Python中文网/ 问答频道 /正文

# coding=utf-8
import re
f = open('/Users/.../example.txt')
mensaje = f.read()
mensaje = mensaje.replace("\n","")
keywords_cap = ['SpA','SPA','LIMITADA','LTDA','S.A.']
keywords_cap = map(re.escape, keywords_cap)
keywords_cap.sort(key=len, reverse=True)
obj = re.compile(r'\s*([^:]*)(?<!\w)(?:{})'.format('|'.join(keywords_cap)))
print("COMPANY NAME: %s" % obj.findall(mensaje))

我有不同的文件,其中包含:;,公司名称,以及在keywords_cap中定义的一个单词

文件包含:

Nombre o razón social: "MJ FACILITIES SERVICES SpA nombre de fantasía MJ SpA."

现在我的输出是:

MJ FACILITIES SERVICES SpA nombre de fantasía

我只想要MJ FACILITIES SERVICES SpA


Tags: 文件importreobjdeutfmjcap
1条回答
网友
1楼 · 发布于 2024-06-01 13:14:21

您可以首先使用[:,;.]匹配起始边界,然后使用任何空格和可选的"字符来“ltrim”结果(使用\s*"?),然后匹配并捕获除这些分隔符之外的任何0+字符,尽可能少,最多可以使用一个keywords_cap

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

参见Python demoregex demo

细节

  • [:,;.]-a:,;.
  • \s*-0+空格字符
  • "?-可选的"
  • ([^:,;.]*?(?<!\w)(?:{}))-捕获组1(这是re.findall将返回的结果):
    • [^:,;.]*?-除了:,;.之外的任何零个或多个字符,尽可能少(*?是惰性量词)
    • (?<!\w)-不允许紧靠左侧的单词字符
    • (?:{})—包含转义keyword_cap项的替换组

相关问题 更多 >