java - 正则表达式无法正常工作
问题描述
我试图在其中数字格式为“4.97”的字符串中查找,但如果它们小于 1,则它们的格式为 .97、.80 等。我想在字符串中找到这类子字符串和替换它们,使它们以 0 开头。
它适用于字符串
String str = "Rate is : .97";
Result : "Rate is : 0.97"
但不适用于字符串:
String str = "Rate is : .97 . XXXXXXXXX do you want . to perform another calculation . ";
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)(.\d\d.*?)
我还添加了^
字符串匹配器的开头,以确保它只创建一个匹配并且不会重复到第二个匹配。
推荐阅读
- flutter - 如何从 Future 获取数据
在飞镖? - java - 创建 com.example.jpa.repository 中定义的名称为“userRepo”的 bean 时出错
- python - Pandas xlsx 比较日期,如果相等,则给出正确的 col
- html - 使用 R 中的 Web 抓取 Power BI 站点,仪表板中有多个工作表
- spring - 如何使用 Spring Data 查找所有实体,其中标题包含所有提供的值
- javascript - 如何使用侧边栏表单的输入并将其存储为 Google Apps 脚本中的全局变量?
- sql - 如何连接 3 个表,其中一个或多个给定 ID 可能存在于一个或多个表中,每个 ID 只有一行?
- ios - 列表可折叠部分的 SwiftUI 更改图标
- wordpress - 用户角色在 WordPress 中消失
- apache-spark - 我们如何在 Azure 上的 Kubernetes 上为 Spark 提供不同的驱动程序和执行程序?