Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在正则表达式中使用变量?_C#_.net_Regex - Fatal编程技术网

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
    ,以避免他们键入的任何字符被误解为特殊字符
  • 这还将匹配具有较长名称(如
    tax^2
    )的变量末尾的x。这可以通过要求单词边界(
    \b
    )来避免
  • 如果将
    x^1
    写成
    x
    ,则此正则表达式将与之不匹配。这可以通过使用
    (\^\d+)
    来解决

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


(?在我看来,最简单、最快速的实现方法如下:

输入:这是什么?我想

模式应删除我的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}\/>]+)");