如何在匹配字符串之前找到一个单词

时间:2015-09-22 13:12:15

标签: c# regex

通过堆栈溢出问题,但没有得到正确的答案。 我需要一个单独的Regex for before&在匹配的字符串之后。

1)找到特定短语/单词后的单词(这一个正常工作)

  var regex = new Regex(@"(?:" + mytext + @"\s)(?<word>\b\S+\b)");

2)在特定词组/词之前找到单词(不工作)

 var regex = new Regex(@"(?:\S+\s)?\S*" + mytext  + @"\b\S");
  

mytext的=&#34; XYZ&#34;

     

输入=&#34;这是abc xyz defg&#34;

     

输出应该是那样的

     

1)首先,这是工作
   xyz defg

     

2)第二,这是行不通的

     

abc xyz

2 个答案:

答案 0 :(得分:3)

在特定短语/单词后找到单词

var regex = new Regex(mytext + @"\s\w+");

在特定短语/单词之前找到单词

var regex2 = new Regex(@"\w+\s" + mytext);

答案 1 :(得分:2)

您需要允许前面的单词和关键字之间的空格。

另外,为了更加安全,我将Regex.Escapemytext变量一起使用。

所以,我建议使用

var regex = new Regex(@"(?<word>\b\S+\b\s+)?(?:" + Regex.Escape(mytext) + @"\b)");

请参阅demo

为了确保我们捕获整个单词,您可以使用以下正则表达式的变体(因为word是可选的,\b可能是必需的):

var regex = new Regex(@"(?<word>\b\S+\b\s+)?(?:\b" + Regex.Escape(mytext) + @"\b)");
                                               ^^