How to use variables with regex?

后端 未结 2 876
孤街浪徒
孤街浪徒 2020-12-11 12:03

This is the input string: 23x^45*y or 2x^2 or y^4*x^3.

I am matching ^[0-9]+ after letter x. In other words I am matching

相关标签:
2条回答
  • 2020-12-11 12:13

    You can use the pattern @"[cEle]\^\d+" which you can create dynamically from your character array:

    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);
    

    Result:

    x^45
    x^2
    x^3
    

    A few things to note:

    • It is necessary to escape the ^ inside the regular expression otherwise it has a special meaning "start of line".
    • It is a good idea to use Regex.Escape when inserting literal strings from a user into a regular expression, to avoid that any characters they type get misinterpreted as special characters.
    • This will also match the x from the end of variables with longer names like tax^2. This can be avoided by requiring a word boundary (\b).
    • If you write x^1 as just x then this regular expression will not match it. This can be fixed by using (\^\d+)?.
    0 讨论(0)
  • 2020-12-11 12:18

    Try using this pattern for capturing the number but excluding the x^ prefix:

    (?<=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);
    

    This should print :

    45
    2
    3
    

    Do not forget to use the option IgnoreCase for matching, if required.

    0 讨论(0)
提交回复
热议问题