3

如何使用正则表达式来捕获电源语句,以下是一些示例:

2 4

(2*5) x

y (y+1)

或更复杂的,例如 x 4 +(x*2) (x+1)在这种情况下它有 2 个匹配项 ("x 4 " 和 "(x*2) (x+1) ")

我设法使用以下表达式使其在没有括号的情况下工作:

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

但是为了处理可能存在的括号,我在想一些类似的东西,但它仍然不起作用......

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

任何包含其背后思考过程的帮助/解释都将不胜感激,因为我对正则表达式了解不多,而且我刚刚开始学习它。

提前致谢

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

如果在字符串中有一个可能以“(”开头的子字符串,在这种情况下,它应该从该“(”中读取所有内容,直到找到和“)”,否则假定它是一个“\ w”,用“^”分隔它又遵循另一种模式,就像它开始的模式一样。

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

我希望我说清楚了:S

4

1 回答 1

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

希望那有所帮助 :)

于 2013-07-16T19:27:15.243 回答