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

don*_*too 3 .net c# regex

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

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

例如:

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

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

Mar*_*ers 5

@"[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);
Run Code Online (Sandbox Code Playgroud)

结果:

x^45
x^2
x^3
Run Code Online (Sandbox Code Playgroud)

有几点需要注意:

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