将整个段落与单词条件匹配的正则表达式是什么? (段落可能包含多个句点/句号)

问题描述 投票:-1回答:2

需要匹配的字符串:MoffettNathanson LLC的Lisa Ellis分析师Q嗨。大家下午好,欢迎光临,布莱恩我期待与您合作。

正则表达式已尝试[^.]*Analyst[^.]*

匹配的输出Lisa Ellis分析师,MoffettNathanson LLC Q Hi

如您在上面看到的,它在第一个句点之后停止匹配。

有人可以告诉我如何匹配整个段落,以便它在第一个句段后不会停止吗?

python regex string regex-negation regex-greedy
2个回答
0
投票

此正则表达式将匹配整个段。^.*Analyst.*$/m我认为您只需要设置多行标志即可。


0
投票

我假设段落由一个或多个换行符分隔,也就是说,组成段落的句子没有嵌入换行符。然后,在multiline模式下,除了输入字符串的开始和结束,锚点^$分别与行的开始和结束匹配。您还希望确保您要查找的单词在单词边界上,即在任一侧由非单词字符分隔。这样,如果您要查找Analyst,则不会匹配Analysts

\bAnalyst\b

如果要匹配AnalystAnalysts,请明确显示:

\bAnalysts?\b

如果要匹配以Analyst开头的any单词:

\bAnalyst\w+\b

完整的正则表达式:

(?m)^.*?\bAnalyst\b.*?$
  1. [(m)打开多行模式。
  2. ^匹配字符串的开头或行的开头。
  3. .*?至少匹配0个或多个字符,直到:
  4. [\bAnalyst\b在单词边界上匹配Analyst(对于以\bAnalyst\w+\b开头的任何单词都使用Analyst)。
  5. .*?$至少匹配0个或更多字符,直到行尾或字符串末尾。您可以使用.*贪婪匹配,因为.永远不会匹配换行符,因此在段落末尾确实没有匹配的危险。

代码:

import re

text = """This is sentence 1 in paragraph 1. This is sentence 2 in paragraph 1.

This is sentence 1 in paragraph 2. This is sentence 2 in paragraph 2 with the word Analyst contained within.
"""

l = re.findall(r'(?m)^.*?\bAnalyst\b.*?$', text)
print(l)

打印:

['This is sentence 1 in paragraph 2. This is sentence 2 in paragraph 2 with the word Analyst contained within.']
© www.soinside.com 2019 - 2024. All rights reserved.