正则表达式的表达式包含多余的字符

问题描述:

希望这是真的很简单的问题,但我下面的数据字符串见下图:正则表达式的表达式包含多余的字符

*frac {7frac {1} {2} + 8} {frac {3} {4} +3} = 4 

想返回以下

frac {1} {2} 
frac {3} {4} 

,但我找回了以下:

7frac {1} {2}  
{frac {3} {4} 

我起身到现在的表现是:

[^\\*]frac\s{(.*?)}\s*{(.*?)} 

如何删除额外的开始字符?

干杯

+0

在压裂之前删除匹配的东西? – 2013-02-18 20:18:41

看起来你要使用[^\\*]在排除潜在的匹配前面带有“*”的比赛。它可以工作,但它包含匹配中的前缀。您可以使用negative lookbehind(?<!\*))完成相同的操作,但不在匹配中包含前缀。

(?<![*\\])frac\s{(.*?)}\s*{(.*?)} 
+0

谢谢你Cyborgx。 – Chris 2013-02-18 20:20:45

+0

@Chris - 我更新了一些额外的解释。 – JDB 2013-02-18 20:30:00

最简单的方法是不要在表达式的开头添加额外位。你真的需要字符串的开始吗?它看起来不像我。所以只需使用: frac\s{(.*?)}\s*{(.*?)}

您可以删除第一个[^\\*]。该表达式应该只是:

frac\s{(.*?)}\s*{(.*?)} 
+0

我相信'[^ \\ *]'是一种不符合第一个'压裂'的尝试。 – JDB 2013-02-18 20:31:53