我试图在一个字符串中查找数字格式为“4.97”的字符串,但如果它们小于 1,则它们的格式为 .97、.80 等。我想在字符串中找到此类子字符串并替换它们,以便它们以 0 开头。
它适用于字符串
String str = "Rate is : .97";
Result : "Rate is : 0.97"
但不适用于字符串:
String str =“比率是:.97。XXXXXXXXX 您是否想要.执行另一次计算。”;
String str = "Rate is : .97 . XXXXXXXXX do you want . 87 to perform another calculation . ";
String pattern = "(.*\\D)(.\\d\\d.*)";
System.out.println(str.matches("(.*\\D)(.\\d\\d.*)"));
str = str.replaceAll(pattern, "$10$2");
为什么会发生这种情况?
最佳答案
在第二个示例中,.*
最后\\d
之后将匹配除换行符之外的任何字符,换行符将匹配字符串的其余部分。
您可以使用负向后查找 (?<!\S)
在没有捕获组的情况下进行替换检查左侧是否不是非空白字符。
(?<!\S)\.[0-9]
在替换中使用零,后跟完整匹配。
String str = "Rate is : .97 . XXXXXXXXX do you want . 87 to perform another calculation . ";
String pattern = "(?<!\\S)\\.[0-9]";
System.out.println(str.replaceAll(pattern, "0$0"));
输出
Rate is : 0.97 . XXXXXXXXX do you want . 87 to perform another calculation .
<小时/>
如果前面应该有一个非数字,您可以使用正向lookbehind
(?<=\D)\.[0-9]
在Java中
String regex = "(?<=\\D)\\.[0-9]";
关于java - 正则表达式无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004670/