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
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:
^
inside the regular expression otherwise it has a special meaning "start of line".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.tax^2
. This can be avoided by requiring a word boundary (\b
).x^1
as just x
then this regular expression will not match it. This can be fixed by using (\^\d+)?
.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.