2012-05-10 83 views
-3

我有串狀正則表達式來提取字符串的數字有特殊字符

8.123.351(這裏寫一些文字)

我用正則表達式

/([0-9,]+(\.[0-9]{2,})+(\.[0-9]{2,})?)/ 

到從字符串中取值「8.123.351」。它正在爲上面給出的字符串工作。

但它沒有不正常的字符串時,「」例如「179(某些文字在這裏)」。 我修改了正則表達式來匹配這個值,但沒有成功。

因此,誰能建議我的正則表達式從像琴絃號碼:

  1. 8.123.351(這裏寫一些文字)
  2. 179(這裏寫一些文字)
  3. 179.123(有些文字在這裏)
  4. 179.1(這裏的一些文字)
+0

你能否提供更多的想法對數字的常規格式?有什麼規則?可以有任何數量的'.',在任何地方,數字可以是任何大小,長度等? – LeonardChallis

+0

@Leonard,感謝您的評論。我已經發布了一些帶數字的示例字符串。該字符串具有2-3位數字,這是固定的。但是多次出現的數字都是「。」在兩者之間並不固定。所以我需要所有的數字「。」或沒有它 – Sanjay

+0

偶然的俚語術語「特殊字符」不是由Unicode標準定義的。這太麻煩了。所有的代碼點都是特殊的,或者不是特殊的,視情況而定。 – tchrist

回答

1

你是不是很清楚。我做了一些假設來創建一個模式。

  1. 的數字是在字符串的開始
  2. 至少有1位和最多3位前有一個點

現在我們創建你的表達

  1. 在行首匹配1至3位數字

    /^\d{1,3}/ 
    
  2. 有任選的(後組的?)的點和1-3個多個數字

    /^\d{1,3}(?:\.\d{1,3})?/ 
    
  3. 該部分與可重複0次或多次的點

    (具有*替換?
    /^\d{1,3}(?:\.\d{1,3})*/ 
    

    看到它here on Regexr

如果您想閱讀一些關於正則表達式的基礎知識,請參閱I wrote a blog post about that

+0

謝謝stema,它比我準備的更完美的表達。並感謝您提供有關Regex的好博客文章。 – Sanjay

1
/([0-9]+[,\.]?)+/ 

MATC HES您的所有字符串

方...您正則表達式需要一個點匹配,因爲+說,1個或多個匹配的方式。 *是0以上?是0或1

+0

謝謝kuh-chan向我展示我的錯誤,現在正在工作。我可以從字符串中獲得所有數字。「或沒有「。」。我改變了正則表達式,用「*」替換「+」 – Sanjay

+0

它可能不是問題,但是它也會匹配'1.2.3。 (一些文本)'所以如果這是一個問題,這是錯誤的 – LeonardChallis

+0

@Leonard是的,但字符串永遠不會。數字後面是1.2.3。謝謝你的評論。 – Sanjay