我一直试图在比赛前提取这个词。例如,我有以下句子:
“ Allatoona是一个位于乔治亚州巴托县极端东南部的小镇。”
我想在“Bartow”之前提取这个词。
我尝试了以下正则表达式来提取这个词:
\w\sCounty,
当我想要的只是巴托这个词时,我得到的是“w County”。
非常感谢任何帮助。谢谢!
答案 0 :(得分:5)
您可以使用此正则表达式进行预测,以便在County
之前找到单词:
\w+(?=\s+County)
(?=\s+County)
是一个积极的先行者,在当前匹配之前断言存在1个或多个空格,后跟单词County
。
如果您想避免前瞻,那么您可以使用捕获组:
(\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 demo。