如何使用正则表达式来捕获幂函数

时间:2013-07-16 19:06:48

标签: c# regex math expression

我如何使用正则表达式来捕获幂语句,这里有一些例子:

2 4

(2 * 5) X

ý(Y + 1)功能

或更复杂的,如x 4 +(x * 2)(x + 1),在这种情况下它有2个匹配(&#34; x < sup> 4 &#34;和&#34;(x * 2)(x + 1)&#34;)

我设法使用表达式在没有括号的情况下使用它:

Regex rPower = new Regex(@"\w\^\w");

但是为了处理可能存在的括号,我正在考虑这些问题,但它仍然没有工作......

Regex rPower = new Regex(@"(?(?=\()(.*?(?=\)))|(\w))\^(?(?=\()(.*?(?=\)))|(\w))");

任何有关其背后思考过程的帮助/解释都会受到高度赞赏,因为我对正则表达式了解不多,而且我现在才开始学习它。

提前致谢

编辑:为了清楚起见,我打算做的是:

如果在字符串中有一个子字符串,可以以&#34;开头(&#34;在这种情况下,它应该从那个&#34读取所有内容;(&#34;直到它找到&#34; ;)&#34;否则假设它是一个&#34; \ w&#34;,用&#34; ^&#34;分开,它依次跟随另一个模式,就像它开始的模式一样。

基本上它会匹配表达式&#34;(random_Expression)(random_Expression)&#34;,但它实际上可能不是一个复杂的表达式,如果它不包含任何括号我会假设它很简单&#34; \ w&#34;。

我希望自己明确表示:S

1 个答案:

答案 0 :(得分:2)

你可以用这个:

(\([^)]*\)|\w)\^(\([^)]*\)|\w)

示例匹配:

2^2 matches 2^2
a+b^c matches b^c
(a+b)^(c+d) matches (a+b)^(c+d)
2^(a+b) matches 2^(a+b)
(a+b)^2 matches (a+b)^2
(a+b)^2+5^2-(3+2)^(2+3) matches (a+b)^2, 5^2, (3+2)^(2+3)

显然,如果使用嵌套操作之类的东西,你可能会发现表达式上的错误。如果你打算使用复杂的表达式,我猜你必须用更详细的方法仔细解析它们。

  

即使简要说明,您能否编辑或回复解释   表达式是如何工作的?

它与原始表达式\w\^\w类似,但它会使用\w更改每个(\([^)]*\)|\w)。如果你仔细观察,那么匹配“括号内的东西”(由\([^)]*\)给出,这对嵌套括号不起作用)或“简单的单词”(\w)。

希望有所帮助:)