2011-09-15 57 views
1

我使用此/[-\+,\.0-9]+/來匹配字符串中的數字,如+4400,00 %-3500,00 %0.00 %歐洲編號正則表達式

我想要的匹配結果是+4400,00,我正確地得到它。

如果我想要像+4.400,00 %(點數千)的字符串相同的結果怎麼辦?

編輯

怎麼辦我要修改我的正則表達式像<font color="red">+44.500 %</font>字符串匹配的號碼?

+9

我認爲應該有一個單獨的StackExchange「寫我的正則表達式」。或者更好的是,一位將軍「爲我工作」。 –

+2

你的正則表達式已經匹配'+ 4.400,00'。我沒有看到問題。另外,你可以寫'/ [ - +,。0-9] + /',而不改變意思。 –

+1

你有理由......對不起: - \但它非常緊急....你能指點我到一個可以快速學習這個特定目的的地方嗎? –

回答

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

這應該包括字符串

  • 可以用+-,然後也許開始有些空格
  • 然後一個和三個numbe之間有RS
  • 則有三個數字,用了一段
  • 前綴,則有一個逗號和至少一個數字逗號

關於你的(內部字符串匹配的號碼)的附加問題的背後,你應該查看你正在使用的任何正則表達式API的手冊。大多數API有獨立的searchmatch方法; match希望整個字符串成爲正則表達式語言的一部分,而search也將匹配子字符串。

+0

你有點快)) – Werolik

+0

對不起,請問你最後一個案子:「+ 44。050%「:」+「或減號與數字之間的空格!那麼是什麼? –

+1

以'/ [\ - \ +]?\ s * [0-9]'開頭''s'通常是像'[\ t \ r \ n]',因此匹配一個空白字符,所以'\ s *'匹配零個或多個空白字符。 – 2011-09-15 15:07:22

0

你的正則表達式已經匹配「。」。但這聽起來像你還想剝奪「。」出來嗎?如果是這樣的話,你需要一個替代品。在Perl,

if ($input =~ /(-|\+)[0-9][,\.0-9]+/) { 
    $input =~ s/\.//; 
} else { 
    die; 
} 

我也改變了正則表達式,因此將只匹配 - 和+在啓動,因此它需要一個初始位

2

[\+-]? - 正負

\d{1,3} - 一些數字

(\.\d{3})* - 前

,\d{2}逗號和2個數字的3位數字與點位組

所以我們得到:

/[+-]?\d{1,3}(\.\d{3})*,\d{2}/