2017-07-28 75 views
0

我有一個正則表達式,它將匹配$中的金額。Word邊界不能用於金額(REgex)

(\-?\$\-?[0-9]+\.?[0-9]*|usd\-?[0-9]+\.?[0-9]*|[0-9]+\.?[0-9]*\-?usd|[0-9]*\.?[0-9]*\$) 

目前其匹配的$ 250USD250等,它不應該匹配$ 250abchhh$ 250

所以,我嘗試了字邊界,但它並沒有解決這個問題,我該如何解決這個問題?

匹配情況是

$456 
$45.6 
$.5 
$-45 
-$45 
usd-456 
usd46 
usd4.6 
usd.46 
1$ 
1.5$ 
.5$ 
-.5$ 
5usd 
456usd 

它不應該匹配

455$abc 
    abc$123 
    abcuds1 
    jhb$5665usdjnjnb 
    $usd1555 
    usd$768 
    $566usd 
    $5788usdbjhj 
+0

但是你的正則表達式沒有問題。看看這裏:https://regex101.com/r/rAJLc0/6。當您有$和usd並且使用小數點時您遇到問題。你想要解決什麼問題? 「但它只能單獨匹配。」 - 這句話沒有意義,對不起。 – Gangnus

+0

刪除了那句話 –

+0

這是與假定的重複不同的問題。另一個問題是如何更簡單地讀取美元總和。這個問問如何切斷線路上不需要的部分。 – Gangnus

回答

0

你也應該寫一個小數正確的正則表達式。並使用^ $開始和結束行。

^\s*(?:(?:(?:-?(?:usd|\$)|(?:usd|\$)-)(?:(?:0|[1-9]\d*)?(?:\.\d+)?(?<=\d)))|(?:-?(?:(?:0|[1-9]\d*)?(?:\.\d+)?(?<=\d))(?:usd|\$)))\s*$ 

查看here的測試結果。