当字符串以pattern开头时,正则表达式匹配最后一个单词

时间:2018-03-28 18:42:35

标签: regex

我试图创建一个正则表达式来匹配字符串的最后一个单词,但前提是字符串以某种模式开头。

例如,我希望只有当字符串以&#34开头时才能得到字符串的最后一个字;猫#34;。

  • "猫吃黄油" - >会匹配"黄油"。
  • "猫喝牛奶" - >会匹配"牛奶"
  • "狗吃牛肉" - >会找不到匹配。

我知道以下内容会给我最后一句话:

\s+\S*$

我也知道我可以使用积极的外观来确保字符串以某种模式开头:

(?<=The cat )

但我无法将它们结合起来。

我将在c#中使用它,我知道我可以将它与一些字符串比较运算符结合起来,但我希望这一切都在一个正则表达式中,因为这是几个正则表达式模式字符串之一我将循环。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

这个怎么样?

^The\scat.*\s(\w+)$

答案 1 :(得分:0)

我的正则表达式非常生疏,但你不能简单地添加&#34;你在\s+\S*$开始时要找的那个词,如果你知道这会回到最后一个字? 那样的东西(&#34; \&#34;应该是逃脱标志,所以它被读作实际的单词):

\T\h\e\ \c\a\t\ \s+\S*$

答案 2 :(得分:0)

使用以下正则表达式:

^The cat.*?\s+(\S+)$

详细说明:

  • ^ - 字符串的开头。
  • The cat - &#34;开始&#34;图案。
  • .*? - 一系列任意字符,不情愿的版本。
  • \s+ - 一系列&#34;白色&#34;字符。
  • (\S+) - 捕获组 - &#34;非白色&#34;的序列字符, 这就是你想要捕捉的东西。
  • $ - 字符串的结尾。

所以最后一个词将出现在第一个捕获组中。

答案 3 :(得分:0)

没有正则表达式

不需要正则表达式。只需使用C#&#39; StartsWith与Linq&#39; Split(' ').Last()

See code in use here

using System;
using System.Linq;
using System.Text.RegularExpressions;

class Example {
    static void Main() {
        string[] strings = {
            "The cat eats butter",
            "The cat drinks milk",
            "The dog eats beef"
        };
        foreach(string s in strings) {
            if(s.StartsWith("The cat")) {
                Console.WriteLine(s.Split(' ').Last());
            }
        }
    }
}

结果:

butter
milk

使用正则表达式

但是,如果您更喜欢正则表达式解决方案,则可以使用以下内容。

See code in use here

using System;
using System.Text.RegularExpressions;

class Example {
    static void Main() {
        string[] strings = {
            "The cat eats butter",
            "The cat drinks milk",
            "The dog eats beef"
        };
        Regex regex = new Regex(@"(?<=^The cat.*)\b\w+$");
        foreach(string s in strings) {
            Match m = regex.Match(s);
            if(m.Success) {
                Console.WriteLine(m.Value);
            }
        }
    }
}

结果:

butter
milk