2014-01-30 289 views
0

之后匹配的内容我有一些表情&我需要提取所有的人说成一个列表正则表达式括号

Example       Output 
(A + B)/(C + D)+(E/F)   {(A + B),/, (C + D), +, (E/F) } 
(A + B)/(C + D)     (A + B), /, (C + D) 

我需要它们是括号外的运营商了。

我用这一点,但此仅在括号

Pattern p = Pattern.compile("(\\(.*?\\))"); 
Matcher m = p.matcher(exp7); 
List<String> expressions = new ArrayList<String>(); 
while(m.find()) 
{ 
    expressions.add(m.group()); 
} 

同样在获取数据,如果我有类型的表达式

(A/B) + C我需要通过使用上述模式I可以得到{(A/B), +, C}

只检索(A/B)。有没有正则表达式来获取上述类型的表达式的所有数据。

+6

决不解析与正则表达式工科数学,特别是不配备的功能做发动机... – nhahtdh

+0

@nhahtdh:哦,我能看到你在得到。很高兴知道。有没有其他方法可以获得上述输出? – SilentCoder

+0

http://en.wikipedia.org/wiki/Shunting_yard_algorithm – nhahtdh

回答

0

我知道如何在两个步骤解决此问题:

第一步。

搜索模式:

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

取代:

\1, 

结果:

(A + B)/(C + D)+(E/F) (A + B),/,(C + D),+,(E/F), 
(A + B)/(C + D)   (A + B),/,(C + D),  

步骤2.

最终摆脱不必要的逗号。 添加'{'和'}'。

+0

在正则表达式上给出错误。有些角色没有正确逃脱。 – SilentCoder

+3

正则表达式被更好写作'(\([^()] * \)| [^()] +)'或'引用“(\\([^()] * \\)| [^() ] +)“'但会造成问题,当存在嵌套括号,如'((A +(B))/(C + d))' – sln

+0

@sln:如何有关评估这个表达式(A/B)+ C?正则表达式可以更新以评估以上表达式吗? – SilentCoder