C# 如何在正则表达式中使用变量?
这是输入字符串:C# 如何在正则表达式中使用变量?,c#,.net,regex,C#,.net,Regex,这是输入字符串:23x^45*y或2x^2或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 } 我不熟悉正则表达式,我知道
23x^45*y或2x^2或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
}
我不熟悉正则表达式,我知道如果我定义正则表达式变量,这可以实现,但我不知道如何实现。您可以使用模式
@“[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
- 这还将匹配具有较长名称(如
)的变量末尾的x。这可以通过要求单词边界(tax^2
)来避免\b
- 如果将
写成x^1
,则此正则表达式将与之不匹配。这可以通过使用x
来解决(\^\d+)
(?在我看来,最简单、最快速的实现方法如下:
输入:这是什么?我想
模式应删除我的tokenRef并存储以下输出:
- 第一组这个
- 第二组是什么
- 第三组IWANT
我的问题不太清楚,我想捕获^但我不知道如何使用变量作为模式谢谢dtb的格式化!:)是的,单词边界很重要+1:)切勿使用Regex.Escape
来转义字符类内使用的任意字符,因为此方法仅用于转义字符类外被视为特殊的字符。如果列表中包含]
。
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
string tokenRef = "?";
Regex pattern = new Regex($@"([^{tokenRef}\/>]+)");