2013-02-27 48 views
-4

我試圖\b[0-9]{1,4}\.[0-9]{1,3}\.[0-9]{0,3}但卻忽略34.89和23.89什麼是正則表達式罰款的粗體數字

我想在下面的文本中的所有數字序列,除了28.72%

34.89 
0105.93.10 ghghghh 
0105.93.20 ghghhh 
jjjjjhjj 0105.93.30 jsdfsd iksifsdjfk sdfsdk 
0105.93.40ierfgg dfgkdfg dfgolgh 23.89 
28.72% 

感謝

Paul

+0

爲什麼你不想找到'28.72%'? – 2013-02-27 15:13:39

+2

告訴我們您想要作爲正則表達式實施的英語規則。 – 2013-02-27 15:14:03

+2

粗體數字是什麼? – 2013-02-27 15:14:27

回答

2

你的正則表達式需要兩個點存在。你需要做的最後一個點位序列可選,你需要在那裏%或其它數字如下排除比賽(否則28.728.72%將匹配):

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{1,3})?(?![0-9%]) 
+0

這幾乎做到了,但它去,並找到子字符串示例0105.93.10中的模式產生0105.93.10和93.10,我只會喜歡0105.93.10 – Paulute 2013-02-27 15:27:54

+0

這是一個很好的答案,但在他的例子中,它不符合' .40'因爲它緊接着是「i」,而不是字邊界 – 2013-02-27 15:28:49

+0

@ExplosionPills:啊,是的,謝謝你的注意。會立即解決這個問題。 – 2013-02-27 15:31:14

0

這將找到所有由單點分隔的數字組,然後是%

(?:\d+\.)+\d+(?!\%) 

它需要在點的每一邊至少有一個數字。除此之外,它並不關心每個組中有多少個數字。在要求數字中至少有一個點。

這也將需要每個組有數字2和4之間:

(?:\d{2,4}\.)+\d{2,4}(?!\%) 
+0

我不希望它查找該查找的子字符串,只是轉到下一個查找前。 0105.93.10不是0105.93.10,105.93.10,05.93.10等 – Paulute 2013-02-27 15:36:24

+0

@Paulute,它不會那樣做;它只會給你完整的比賽。 – 2013-02-27 15:41:15

+0

@Paulute,如果這是你得到的結果,也許你正在程序中正確使用正則表達式。這是什麼語言? – 2013-02-27 15:42:42

1

做最後部分可選

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{0,3})? 

你原來的表情需要這段時間。

你是不是很具體與你的匹配%規則,所以我做了這個:

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{0,3})?(?=[^%\d]|$) 

最後一部分爲任何非%,非數字字符積極前瞻或行結束。它也需要非數字,否則28.7將匹配表達式的其餘部分,並且最後的2匹配非百分比字符。

+0

這幾乎做到了,但它;在子字符串示例0105.93.10中找到模式,產生0105.93.10和93.10,我只想要0105.93.10 – Paulute 2013-02-27 15:31:01

+0

應該沒有子表達式,因爲'?:'應該阻止捕獲 – 2013-02-27 15:46:35