如何使用正则表达式捕获一个强调语句?

3
我该如何使用正则表达式来捕获幂操作的语句呢?以下是一些例子:
24 (2*5)x y(y+1) 或者更复杂的,例如x4+(x*2)(x+1),这种情况下有两个匹配项("x4"和"(x*2)(x+1)")。
我已经实现了不带括号的匹配操作,使用的表达式是:
Regex rPower = new Regex(@"\w\^\w");

但是,为了处理可能存在的括号,我想到了以下解决方案,但还不起作用...

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

希望能提供包括思路在内的任何帮助/解释,因为我不太了解正则表达式,现在才开始学习。

提前感谢。

编辑:为了清晰起见,我的意图是:

如果字符串中有一个子字符串,可能以"("开头,那么它应该读取从那个"("开始直到找到")"的所有内容,否则就假定它是一个"\w",由"^"分隔,紧接着又遵循像它开始的那种模式。

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

希望我表述得清楚: S


你能准确地定义什么是幂语句吗?((((((((((2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2) ^ 2 是一个幂语句吗? - Kevin
一个幂语句可以表示为B^E,其中B是底数,E是指数。B和E本身可以是复杂的表达式,并且反过来也可以是幂。我将编辑帖子以提供更多的明确性。 - Pedro 'Xympa' Nascimento
“它可能并不是一个复杂表达式”。你能准确定义什么是复杂表达式吗? - Kevin
但是,那些将会是多个幂语句彼此嵌套,除了孤独的“(2)”之外,对于我的目的来说并不是,尽管从技术上讲它是2^1。 - Pedro 'Xympa' Nascimento
我所说的复杂表达式是指在“(”和“)”之间找到的任何字符,它可以是任何数学表达式。 - Pedro 'Xympa' Nascimento
我认为当“标识符”出现时,使用正则表达式进行验证会很困难。考虑一下你有int x = 10;如何评估这个abc^2。这是真还是假? - Sriram Sakthivel
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)。
希望这能有所帮助 :)

它能够正常工作!如果方便的话,您可否编辑或回复,并简要解释一下表达式的运行方式?我很想更好地理解它 :) 非常感谢。 - Pedro 'Xympa' Nascimento

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接