正则表达式在最后一个连字符和空格之后提取字符串

Regex extracting string after last hyphen and spaces

需要使用哪个正则表达式从字符串中提取 'Manchester City'。 字符串是:

Aston Villa - Manchester City

我尝试了 -(.*)\w|-(.),但它抓住了 -

最简单的是[代码]。 *- (. *) [/code] 并且您的数据在 $1 或 \1 或其他取决于您的工具的东西中。假设数据的格式为 xxxxx-xxxxxx

另一个简单的选项是 - (.*) 请参阅:https://regex101.com/r/fY3oE7/1。使用您的语言中的第一个捕获组来获取破折号后的部分。

请注意,-(.*)\w|-(.) 匹配 -,因为这里的两个备选方案都以匹配连字符开头。您通常可以通过环顾四周来检查是否存在某些东西。

但是,在这种情况下,我建议

-\s*\K[^-]+$

由于您只需要匹配最后一个 - 之后的子字符串并删除空格,因此您需要像负无限宽度后视 (?<=-\s*) 这样的东西。但是,在 PCRE 中,不支持无限宽度的 lookbehind。相反,有一个 \K 运算符可以使引擎忽略到目前为止被当前模式捕获的整个匹配项。

看到一个regex demo

细分:

  • - - 文字连字符
  • \s* - 零个或多个空白字符
  • \K - 重置(清空)所有当前保留的匹配缓冲区的运算符
  • [^-]+ - 除 - 之外的一个或多个字符,最多 ...
  • $ - 字符串结尾。