2013-02-18 215 views
0

希望這是真的很簡單的問題,但我下面的數據字符串見下圖:正則表達式的表達式包含多餘的字符

*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

回答

3

看起來你要使用[^\\*]在排除潛在的匹配前面帶有「*」的比賽。它可以工作,但它包含匹配中的前綴。您可以使用negative lookbehind(?<!\*))完成相同的操作,但不在匹配中包含前綴。

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

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

+0

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

0

最簡單的方法是不要在表達式的開頭添加額外位。你真的需要字符串的開始嗎?它看起來不像我。所以只需使用: frac\s{(.*?)}\s*{(.*?)}

0

您可以刪除第一個[^\\*]。該表達式應該只是:

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

我相信'[^ \\ *]'是一種不符合第一個'壓裂'的嘗試。 – JDB 2013-02-18 20:31:53