正则表达式匹配单个括号

时间:2017-11-16 12:59:34

标签: regex string pattern-matching

我需要解析excel公式以生成与C兼容的代码。现在我需要解析" power"使用Java的表达式:

1. F15^2
2. (A1*A2)^2
3. SQRT((A1*A2)^2)

我有以下正则表达式:

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

此表达式正确解析1.和2.

1. Group1: F15, group2: 2
2. Group1: (A1*A2), group2: 2

然而对于3.它会过多地返回1个括号:

3. Group1: ((A1*A2), group2: 2

我应该如何修改正则表达式,以便第1组变为(A1 * A2)而不是((A1 * A2)?

2 个答案:

答案 0 :(得分:0)

如果您只是需要它来处理这些示例,我会将正则表达式更改为:(\([^)(]*\)|\w+)\^(\([^)]*\)|\w+)(我添加了一个(

但总的来说,我不认为正则表达式是正确的方法。我会尝试找一个可以进行括号解析的库,而不是自己尝试实现它。

答案 1 :(得分:0)

添加()应该有效

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