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

通过堆栈溢出问题,但没有得到正确的答案。 我需要在匹配字符串之前和之后使用单独的正则表达式。

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

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

2)在特定短语/单词之前找到单词 (不起作用)

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

mytext的= “XYZ”

输入=“这是abc xyz defg”

输出应该是这样的

1)首先,这是工作
xyz defg

2)第二,这是行不通的

abc xyz

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

另外,为了更加安全,我将使用带有Regex.Escape变量的Regex.Escape

所以,我建议使用

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

见演示

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

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

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

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

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

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