我试图创建一个正则表达式来匹配字符串的最后一个单词,但前提是字符串以某种模式开头。
例如,我希望只有当字符串以&#34开头时才能得到字符串的最后一个字;猫#34;。
我知道以下内容会给我最后一句话:
\s+\S*$
我也知道我可以使用积极的外观来确保字符串以某种模式开头:
(?<=The cat )
但我无法将它们结合起来。
我将在c#中使用它,我知道我可以将它与一些字符串比较运算符结合起来,但我希望这一切都在一个正则表达式中,因为这是几个正则表达式模式字符串之一我将循环。
有什么想法吗?
答案 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()
。
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
但是,如果您更喜欢正则表达式解决方案,则可以使用以下内容。
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