2013-06-27 80 views
0

這裏的目標是找到長度爲5到8的所有數值。小數點和逗號在它們之間是允許的。這是我如何作出的表達式:數值正則表達式

\b[0-9](,?\.?\d){4,7}\b(?!,\d) 

它工作正常,除非它匹配10,000,02332爲000,02332。我嘗試了兩個向後看和^,但它似乎我犯了一些錯誤。

這裏是示例文本

  1. 的Nunc 12vitae lac332us sollicitudin 2033112233,雜色山雀100212存有一,孕婦10,000,02332賭注。 Nunc et 100,021 justo eget arcu fringilla fermentum id venenatis lacus。 Pellentesque a 23133221 tellus vel diam dignissim scelerisque123 nec ac2 12311 ipsum。在12311.1處有調味品1233312234666。 Nulla 4564quis viverra 568833452233 nunc。 Morbi 234322123冥想,nulla adipiscing interdum venenatis,dui mi 2341112333 congue erat,sed 34234112323 suscipit est 345221在lorem中的turpis。 Proin magna123 nunc,1231116565 rhoncus sit amet elit a,fermentum 5467667834533 semper felis。整數non elit placerat metus fermentum auctor。 Donec viverra enim in augue adipiscing,eget facilisis 3422211 ligula 12313645 vulputate。 Maecenas tincidunt 2346776444 posuere pretium。 Donec euismod cursus velit。 ,11111

你可以在這裏進行測試: http://gskinner.com/RegExr/

+0

您上'000,02332'因爲\ B無字字符,其中包括'匹配匹配,'和' .'。 http://www.regular-expressions.info/wordboundaries.html – mjk

回答

2

嘗試增加(?<!\d[,.])到你的正則表達式的前面,改變(?!,\d)(?![,.]\d)

給你:

(?<!\d[,.])\b[0-9](,?\.?\d){4,7}\b(?![,.]\d) 

(?<!\d[,.])向後看檢查一個數字,然後用逗號或句號。

我改變了負向前瞻以檢查是否全站式,因爲否則第一部分12345678.3將匹配。

Test

+0

這看起來好像是一個很好的解決方案,但是它會匹配:'10,01212'。它可能不會出現什麼?如果這被接受,我一定會+1。 –

+0

@DanielGimenez並且'1.1.1.1.1.1'也會匹配。這些要求只是說逗號和全站是允許的,並不是說應該只有一個全站或逗號應該是分開的3位數組。 – Dukeling

+0

這是我最初給出的正確解決方案。我的最初表達並非沒有缺陷,它會通過11.11.11這是錯誤的。歡迎任何人改進它。謝謝Dukeling – ali

1

這可以適合你嗎?它看起來不那麼複雜。

\ B \ d [\ d,。] {3,7} \ d \ b

+0

與其他解決方案一樣,它似乎適用於給定的數據,但如果在文本中出現'10,0212',那麼這是一個糟糕的匹配。 –

+0

這不能解決'10,000,02332'問題。 – Dukeling

+0

不,這是不正確的。它匹配10,000,02332作爲2個單獨的值。在有問題的鏈接上驗證自己。感謝您的回覆 – ali