python - 将正则表达式与可选的先行匹配

标签 python regex regex-lookarounds regex-greedy

我有以下字符串:

来自加州的约翰·纳什姓名

姓名约翰·纳什

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

这是我尝试过的

"NAME(.*)(?:FROM)"
"NAME(.*)(?:FROM)?"
"NAME(.*?)(?:FROM)?"

但这些都不适用于两个字符串。

最佳答案

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

NAME(.*)(?:FROM|$)

查看演示 https://regex101.com/r/rR3gA0/1

在这种情况下,在名称之后它将匹配 FROM 或字符串的末尾。但是在您的正则表达式中,因为您将 FROM 设置为可选,在第一种情况下它将匹配名称后的其余字符串。

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

NAME\s(\w+\s\w+)

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

关于python - 将正则表达式与可选的先行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090977/

相关文章:

python - Google 应用程序引擎 - 错误 : Model constructor takes no positional arguments

regex - Grok 调试 - 仅首先匹配正则表达式未按预期工作

java - 感叹号的正向前瞻

python - 如何在 Python 中使用递归正则表达式或其他方法来递归验证类似 BBcode 的标记?

python - 从 python 线程内部使用 rabbitmq 队列

python - 使用 ruamel 在 yaml 中插入节点

python - 获取字符串中字符串的特定值

java - 通过正则表达式分割,没有特定的范围

regex - 使用 regexp_replace 在 Postgres 9.5 中进行正面回顾

python如何从csv文件更改时间格式