应用具有条件环视的正则表达式

Apply a Regex with a conditional lookaround

假设那些句子:

My name is James Bond

My name is the famous James Bond

我要捕获James Bond

如果我应用 ((?<=is)(.*),第一个需要 James Bond,第二个需要 the famous James Bond

如果我申请((?<=famous)(.*),第二句需要詹姆斯·邦德。

从逻辑上讲,这样做是行不通的:

((?<=famous)|(?<=is))(.*)

是否有可能在两种情况下都以一个正则表达式返回 James Bond 结束?
随着 Regex 引擎解析器的工作,我很确定编程方式与此用例更相关,但我不太确定。

编辑------------ 正则表达式应该处理任何有“is”or/and“famous”的情况,而不仅仅是这两个句子,作为示例。

这是一种表达正则表达式模式的方法:

My name is.*?([A-Z][a-z]*(?: [A-Z][a-z]*)*)

这假设在短语 My name is 之后会有一个或多个大写单词,这与之前提到的实际名称相对应。

Demo

这匹配 James Bond 的两次出现,应该适合您使用,假设您的正则表达式 tool/language 支持捕获组。

您可能会得到最后一次出现的 isfamous:

.*(?:famous|is)\s*(.*)

结果在第 1 组中。请参阅 regex demo

详情

  • .* - 除换行字符外的任何 0 个或多个字符尽可能多
  • (?:famous|is) - famousis 子字符串(如果必须是整个单词,则使用单词边界)
  • \s* - 0+ 个空格
  • (.*) - 第 1 组:除换行字符外的任何 0 个或更多字符。