如何使用正则表达式的变量?
这是输入字符串: 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
选项进行匹配。