【问题标题】:Regex to return the word before the match正则表达式返回匹配前的单词
【发布时间】:2017-06-18 04:50:48
【问题描述】:

我一直在尝试提取匹配前的单词。例如,我有以下句子:

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

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

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

\w\sCounty,

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

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

【问题讨论】:

  • 我想你的意思是“County”之前的那个词,恰好是“Bartow”。

标签: c# regex


【解决方案1】:

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

\w+(?=\s+County)

(?=\s+County) 是一个正向前瞻,它断言在当前匹配之前存在 1 个或多个空格,后跟单词 County

RegEx Demo

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

(\w+)\s+County

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

【讨论】:

    【解决方案2】:

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

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

    因此,您只需将 \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.

    【讨论】:

      【解决方案3】:

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

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

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

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

      之后添加 {n}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多