如何使用正则表达式的变量?

这是输入字符串: 23x^45*y or 2x^2 or y^4*x^3

我在字母x之后匹配^[0-9]+ 。 换句话说,我匹配x后跟^后跟数字。 问题是我不知道我匹配x ,它可能是我在char数组中存储为变量的任何字母。

例如:

 foreach (char cEle in myarray) // cEle is letter in char array x, y, z, ... { match CEle in regex(input) //PSEUDOCODE } 

我是regex的新手,如果我定义正则表达式变量,我可以做到这一点,但我不知道怎么做。

你可以使用你可以从你的角色数组动态创建的模式@"[cEle]\^\d+"

 string s = "23x^45*y or 2x^2 or y^4*x^3"; char[] letters = { 'e', 'x', 'L' }; string regex = string.Format(@"[{0}]\^\d+", Regex.Escape(new string(letters))); foreach (Match match in Regex.Matches(s, regex)) Console.WriteLine(match); 

结果:

 x^45 x^2 x^3 

有几点需要注意:

  • 有必要在正则表达式中转义^ ,否则它具有特殊含义“行首”。
  • 在将用户的文字字符串插入正则表达式时使用Regex.Escape是个好主意,以避免他们键入的任何字符被误解为特殊字符。
  • 这也将使用较长名称(如tax^2将变量末尾的x匹配。 这可以通过要求字边界( \b )来避免。
  • 如果你把x^1写为x那么这个正则表达式将不匹配它。 这可以通过使用(\^\d+)?来修复(\^\d+)?

尝试使用此模式捕获数字但不包括x ^前缀:

(?<=x\^)[0-9]+

 string strInput = "23x^45*y or 2x^2 or y^4*x^3"; foreach (Match match in Regex.Matches(strInput, @"(?<=x\^)[0-9]+")) Console.WriteLine(match); 

这应该打印:

 45 2 3 

如果需要,请不要忘记使用IgnoreCase选项进行匹配。