正则表达式找到在运行时确定的任意字符串

时间:2017-01-04 05:12:27

标签: c# regex

需要在运行时构造正则表达式(在我的例子中使用C#)来查找由某个模式包围的给定字符串。例如,程序知道它需要找到以myString内的空格结尾的targetString。如果我们将正则表达式设置为

string myRegex = myString + @"\s";

如果myString包含正则表达式控制字符,则正则表达式将不可靠。 +等。例如说

myString = "f.f";
targetString = "f.ff fff f.f ff";

然后上面的正则表达式myRegex将匹配第一个fff,这不是我们想要的。当然,正确的正则表达式是f\.f\s,但是考虑到大量的正则表达式控制字符,将myString转换为这样的形式会很混乱。

有没有办法用任意输入字符串生成这样的正则表达式?理想情况下,可以使用一些控制字符来包裹myString以指示字符串需要按字面意思匹配。所以在我的幻想中,正则表达式可以用类似

的东西生成
string myRegex = @"{{" + myString + @"}}\s";

括号代表我正在寻找的神奇结构。

请注意,myString周围的模式可能比简单地“以\s结尾”更复杂。

1 个答案:

答案 0 :(得分:2)

使用Regex.Escape():

string myRegex = Regex.Escape(myString) + @"\s";