【问题标题】:Regex to find the word immediately after a particular word正则表达式在特定单词之后立即查找单词
【发布时间】:2013-01-18 09:18:27
【问题描述】:

我想使用正则表达式在字符串中的特定单词之后立即找到该单词。例如,如果这个词是“我的”,

“这是我的祈祷”——祈祷

“这是我的书()”-书

是否可以使用正则表达式?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    正则表达式是

    (?<=\bmy\s+)\p{L}+
    

    \p{L}+ 是一个字母序列。 \p{L}Unicode code point with the property“字母”,因此它匹配任何语言的字母。

    (?&lt;=\bmy\s+) 是一个后向断言,确保单词“my”在之前

    【讨论】:

    • +1;添加了一个单词边界,所以你不匹配army surplus :)
    【解决方案2】:

    你可以使用

    my\s+\b(\w+)\b
    

    这会捕获第一个子组中 my 之后的单词。

    【讨论】:

      【解决方案3】:

      使用前瞻 REGEX:

      (?<=my )\b\w+\b
      

      【讨论】:

        【解决方案4】:

        对于my,使用以下正则表达式:

        my (\w+)
        

        【讨论】:

          【解决方案5】:

          如果my取自用户输入,

          static string GetWordAfter(string word, string phrase)
          {
              var pattern = @"\b" + Regex.Escape(word) + @"\s+(\w+)";
              return Regex.Match(phrase, pattern, RegexOptions.IgnoreCase).Groups[1].Value;
          }
          
          ...
          
          string wordAfterMy = GetWordAfter("my", "this is my book()"); // gives book
          

          如果没有匹配,这将返回一个空字符串。

          【讨论】:

            【解决方案6】:

            “这是我的祈祷”

            .* (my )(\D*)( ).*
            

            group2 结果将是你的“祈祷”

            【讨论】:

            • 你使用了很多不必要的组,好吧,但是你为什么使用\D,它是“Not a digit”?数字与匹配的单词有什么关系?
            猜你喜欢
            • 1970-01-01
            • 2017-02-03
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 2022-07-14
            • 2021-11-21
            • 1970-01-01
            相关资源
            最近更新 更多