正则表达式在比赛前返回单词

时间:2017-06-18 04:50:48

标签: c# regex

我一直试图在比赛前提取这个词。例如,我有以下句子:

Allatoona是一个位于乔治亚州巴托县极端东南部的小镇。

我想在“Bartow”之前提取这个词。

我尝试了以下正则表达式来提取这个词:

\w\sCounty,

当我想要的只是巴托这个词时,我得到的是“w County”。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式进行预测,以便在County之前找到单词:

\w+(?=\s+County)

(?=\s+County)是一个积极的先行者,在当前匹配之前断言存在1个或多个空格,后跟单词County

RegEx Demo

如果您想避免前瞻,那么您可以使用捕获组:

(\w+)\s+County

并从匹配结果中提取捕获的组#1。

答案 1 :(得分:2)

您的\w\sCounty,正则表达式返回w County,因为\w匹配单个字符,该字符是字母,数字或_。它与整个单词不匹配。

要匹配1个或多个符号,您需要使用+ 量词并捕获您需要提取的部分,您可以依赖捕获组(...)

因此,您只需将\w替换为(\w+)即可修复您的模式,然后在获得匹配后访问Match.Groups[1].Value

但是,如果县名包含非单词符号,如连字符,则\w+不匹配。在这种情况下,匹配1个或多个非空白符号\S+可能会成为更好的选择。

查看C# demo

var m = Regex.Match(s, @"(\S+)\s+County");
if (m.Success) 
{
     Console.WriteLine(m.Groups[1].Value);  
}

查看regex demoenter image description here