2016-12-03 191 views
-1

如果字符串超過3位(電話號碼應該被替換),我想替換字符串中的數字,並且如果數字後面跟有$,它不應該替換數字小數點。我用下面的表達式。Java用於替換特定字符串的正則表達式

「\ d {3} +(?!\ $/\。)」

問題我面對的是,它正在取代,因爲我希望替換十餘位號碼一些數字是一些ID超過10位的數字。此外,如果一個數字在小數點後有3位以上的數字,這些數字也會被替換。如果它有小數點,我不想要一個數字被替換。有些身體可以幫助嗎?

例如,說一個數字字符串「3452678916381914」。其實它必須被替換。但上面的正則表達式並沒有取代它。對於數字如123445.567美元 - 這些數字不應該被取代。但上述正則表達式替換45.567

+1

給出一些示例輸入/輸出。 – rafid059

+0

我沒有得到超過10位數字的位。所以,你需要匹配長度爲4-9的int值,而不是跟在'$'之後?試試['(?<!\。)\ b \ d {4,9} + \ b(?!\ $ | \。\ d)'](https://regex101.com/r/0X2Y3j/2) 。 –

+0

'(?<![\。\ $])\ d {3,}(?![\。\ $])'? – Skycc

回答

1

使用lookahead and lookbehind正則表達式,第一個斷言開始單詞邊界不是由$.先,然後斷言結束字邊界不是由$.

它同時適用於例如跟着你提供的,則可能需要調整一點點地處理一些極端情況

(?<![\$\.])\b\d{3,}\b(?![\$\.]) 

看到demo,它匹配第一個2而不是休息

3452678916381914 # match 
1234 56789  # match 
$1234,45.567 
$1234 
12.345 
12345.6678 
123$ 
+0

感謝它的工作。但仍然有2例失敗。其實我會有一個文本字符串。例如,這是一個測試消息12345678.only,測試成本爲123 $。這裏的號碼12345678必須被替換,123 $不應該被替換。 – hemsush

+0

對於我的情況,$之前和之後的數字不應該被替換 – hemsush

+0

我看到了,我沒想到你的字符串後面會有'$',更新爲斷言數字不會跟着''''或'$' – Skycc