2016-12-03 185 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