如何在匹配字符串之前找到一个单词
通过堆栈溢出问题,但没有得到正确的答案。 我需要在匹配字符串之前和之后使用单独的正则表达式。
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 defg2)第二,这是行不通的
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);