java - 正则表达式无法正常工作

标签 java regex string

我试图在一个字符串中查找数字格式为“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]

在替换中使用零,后跟完整匹配。

Regex demo | Java demo

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]

Regex demo

在Java中

String regex = "(?<=\\D)\\.[0-9]";

关于java - 正则表达式无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004670/

相关文章:

c - 如何将字符串分配给 char* 指针?

java - 网站的客户端 android 应用程序

java - 为什么从 HttpClient 版本 3 切换到 4

ruby - 如何使用正则表达式将字符串转换为 HTML 标记?

php 仅当子字符串不属于另一个子字符串时才查找该子字符串

javascript - 将对象转换为字符串

Java 连接到 https URL

Java Dropbox API 在上传文件后获取公共(public)共享链接

ruby-on-rails - Rails 正则表达式提取 Twitpic 链接/代码(如果存在)

javascript - 在 JavaScript/TypeScript 中检测字符串中的模式