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

hud*_*uda 5 c# regex

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

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

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

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

 var regex = new Regex(@"(?:\S+\s)?\S*" + mytext  + @"\b\S");
Run Code Online (Sandbox Code Playgroud)

mytext的= "XYZ"

输入="这是abc xyz defg"

输出应该是这样的

1)首先,这是工作
xyz defg

2)第二,这是行不通的

abc xyz

Wik*_*żew 2

您需要在单词之前和关键字之间留出空格。

另外,为了额外的安全性,我将 aRegex.Escapemytext变量一起使用。

所以,我建议使用

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

查看演示

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

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