这是输入字符串:23x^45*y or 2x^2 or y^4*x^3
。
我在信^[0-9]+
后匹配x
。换句话说,我匹配x
后跟^
后跟数字。问题是我不知道我匹配x
,它可能是我在char数组中存储为变量的任何字母。
例如:
foreach (char cEle in myarray) // cEle is letter in char array x, y, z, ...
{
match CEle in regex(input) //PSEUDOCODE
}
我是regex的新手,如果我定义正则表达式变量,我可以做到这一点,但我不知道如何。
答案 0 :(得分:3)
您可以使用可以从角色阵列动态创建的模式@"[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
)相匹配。这可以通过要求字边界(\b
)来避免。x^1
写为x
,则此正则表达式将与之不匹配。可以使用(\^\d+)?
。答案 1 :(得分:0)
尝试使用此模式捕获数字,但不包括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
进行匹配。
答案 2 :(得分:0)
从我的角度来看,最简单快捷的实施方式如下:
<块引用>输入:这个?_isWhat?IWANT
string tokenRef = "?";
Regex pattern = new Regex($@"([^{tokenRef}\/>]+)");
该模式应该删除我的 tokenRef 并存储以下输出: