2017-06-18 64 views
2

我一直试图在比赛前提取单词。例如,我有以下一句:正则表达式在比赛前返回单词

Allatoona是位于东南极巴托县的一个小镇,格鲁吉亚。”

我想“巴托”之前提取的单词。

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

\w\sCounty, 

我得到回到什么是“W县”当我想要的东西只是一个词巴托。

任何援助将不胜感激。谢谢!

回答

4

你可以使用这个表达式与前瞻County之前找到的字:

\w+(?=\s+County) 

(?=\s+County)是一个积极的预测先行断言的1个或多个空格,后面的字County超前电流匹配的存在。

RegEx Demo

如果你想避免超前,那么你可以使用一个捕获组:

(\w+)\s+County 

和提取捕获组#1的比赛结果。

2

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

要匹配1个或更多的符号,你需要使用一个+量词和捕捉你需要提取你可以依靠捕获组(...)的部分。

所以,你可以通过仅仅用(\w+)代替\w来修复你的模式,然后在比赛结束后访问Match.Groups[1].Value

但是,如果县名包含非单词符号(如连字符),则\w+将不匹配它。 A \S+与1个或更多匹配非空白符号可能会成为更好的选择。

看到一个C# demo

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

看到一个regex demoenter image description here