将正则表达式与可选的前瞻匹配

Day*_*ira 5 python regex regex-greedy regex-lookarounds

我有以下字符串:

NAME John Nash FROM California

NAME John Nash

我想要一个能够为两个字符串提取"John Nash"的正则表达式.

这是我试过的

"NAME(.*)(?:FROM)"
"NAME(.*)(?:FROM)?"
"NAME(.*?)(?:FROM)?"
Run Code Online (Sandbox Code Playgroud)

但这两个字符串都不起作用.

Kas*_*mvd 5

您可以在FROM和锚之间使用逻辑或$

NAME(.*)(?:FROM|$)
Run Code Online (Sandbox Code Playgroud)

参见演示https://regex101.com/r/rR3gA0/1

在名称,它将匹配后,这种情况下FROM或string.But在您正则表达式到底,因为你使FROM可选的冷杉情况下,将名称后字符串的其余部分相匹配。

如果您想使用更通用的正则表达式,则最好根据您的名字可能性形状来创建正则表达式,例如,如果您确定自己的名字是由2个单词创建的,则可以使用以下正则表达式:

NAME\s(\w+\s\w+)
Run Code Online (Sandbox Code Playgroud)

演示https://regex101.com/r/kV2eB9/2