如何从 re.findall() 结果中删除特定模式

How to remove a specific pattern from re.findall() results

我有一个 re.findall() 在 python 中搜索模式,但它 returns 一些不需要的结果,我想知道如何排除它们。正文如下,我想获取名称,而我的语句 (re.findall(r'([A-Z]{4,} \w. \w*|[A-Z]{4,} \w*)', text)) 返回的是:

 'ERIN E. SCHNEIDER',
 'MONIQUE C. WINKLER',
 'JASON M. HABERMEYER',
 'MARC D. KATZ',
 'JESSICA W. CHAN',
 'RAHUL KOLHATKAR',
 'TSPU or taken',
 'TSPU or the',
 'TSPU only',
 'TSPU was',
 'TSPU and']

我想摆脱“TSPU”模式项目。有人知道怎么做吗?

JINA L. CHOI (NY Bar No. 2699718)

ERIN E. SCHNEIDER (Cal. Bar No. 216114) schneidere@sec.gov

MONIQUE C. WINKLER (Cal. Bar No. 213031) winklerm@sec.gov

JASON M. HABERMEYER (Cal. Bar No. 226607) habermeyerj@sec.gov

MARC D. KATZ (Cal. Bar No. 189534) katzma@sec.gov

JESSICA W. CHAN (Cal. Bar No. 247669) chanjes@sec.gov

RAHUL KOLHATKAR (Cal. Bar No. 261781) kolhatkarr@sec.gov

  1. The Investor Solicitation Process Generally Included a Face-to-Face Meeting, a Technology Demonstration, and a Binder of Materials [...]

你可以做一些简单的 .filter-ing,如果你的数组是 results,

removed_TSPU_results = list(filter(lambda: not result.startswith("TSPU"), results))

您可以使用

\b(?!TSPU\b)[A-Z]{4,}(?:(?:\s+\w\.)?\s+\w+)?

参见 this regex demo详情:

  • \b - 单词边界(否则,正则表达式可能会“捕获”包含 TSPU 的单词的一部分)
  • (?!TSPU\b) - 如果 TSPU 字符串后跟 non-word 字符或字符串结尾紧跟在当前位置
  • [A-Z]{4,} - 四个或更多大写 ASCII 字母
  • (?:(?:\s+\w\.)?\s+\w+)? - 可选出现:
    • (?:\s+\w\.)? - 可选出现一个或多个空格、一个单词 char 和一个文字 . char
    • \s+ - 一个或多个空格
    • \w+ - 一个或多个单词字符。

在Python中,可以使用

re.findall(r'\b(?!TSPU\b)[A-Z]{4,}(?:(?:\s+\w\.)?\s+\w+)?', text)