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

时间:2016-02-22 12:50:46

标签: regex pcre

需要使用哪个正则表达式从字符串中提取“曼城”。 字符串是:

Aston Villa - Manchester City

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

请注意,-(.*)\w|-(.)匹配-,因为这两个选项都以匹配连字符开头。您通常可以通过环视检查是否存在某些内容。

然而,在这种情况下,我建议

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

由于您需要仅匹配最后-之后的子字符串并修剪掉空格,因此您需要类似负无限宽度的后置(?<=-\s*)。但是,在PCRE中,不支持无限宽度的后视。相反,有一个\K运算符使引擎省略了当前模式到目前为止抓取的整个匹配。

查看regex demo

故障:

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

答案 2 :(得分:0)

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