繁体   English   中英

正则表达式返回匹配前的单词

[英]Regex to return the word before the match

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

阿拉托纳是位于佐治亚州巴托县东南部的一个小镇。

我想提取“Bartow”之前的词。

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

\w\sCounty,

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

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

您可以使用此正则表达式前瞻在County之前查找单词:

\w+(?=\s+County)

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

RegEx演示

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

(\w+)\s+County

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

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

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

因此,您可以通过仅使用(\\w+)替换\\w来修复模式,然后在获得匹配后访问Match.Groups[1].Value

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

查看C#演示

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

查看正则表达式演示 在此输入图像描述

您可以使用此正则表达式查找 Country 之前的单词

([\\w]*.?\\s+).?县

  • [\\w] * 随时匹配任何字符
  • .? 是如果句子中可能有一个特殊的字符,比如 (,.!)
  • 和银行空间的\\s+ (如果句子中有双空格,则工作)
  • .? 如果在 Country 之前放置了一个特殊字符

如果您想查找多个单词,只需在([\\w]*.?\\s+){3}.?County后面添加 {n}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM