通过堆栈溢出问题,但没有得到正确的答案。 我需要一个单独的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 defg2)第二,这是行不通的
abc xyz
答案 0 :(得分:3)
在特定短语/单词后找到单词
var regex = new Regex(mytext + @"\s\w+");
在特定短语/单词之前找到单词
var regex2 = new Regex(@"\w+\s" + mytext);
答案 1 :(得分:2)
您需要允许前面的单词和关键字之间的空格。
另外,为了更加安全,我将Regex.Escape
与mytext
变量一起使用。
所以,我建议使用
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)");
^^