gpt4 book ai didi

java - 如果 java Regex 中的常量值与该 Regex 匹配,则将其替换为其他值

转载 作者:行者123 更新时间:2023-12-02 03:46:38 24 4
gpt4 key购买 nike

我了解了一些关于java正则表达式的知识,在我的项目中我必须做一些文本替换。例如我有这一行

db.articles.Find(112);

我想将每个出现的 Find 替换为与此正则表达式匹配的 byId

\s[a-zA-Z]+(\.)[a-zA-Z]+(\.)Find\([0-9]+\);

我写了这个java代码

public static void main(String[] args) {

String data = " db.articles.Find(112);";

String regex = "\\s[a-zA-Z]+(\\.)[a-zA-Z]+(\\.)Find\\([0-9]+\\);";


data = data.replaceAll(regex, "byId");

System.out.println(data); // output is byId

// but i want output something like this -> db.articles.byId(112);

}

但它没有按预期工作

输入示例

db.articles.Find(12);
dbContex.users.Find(1);
Db.libs.Find(50);

输出示例

db.articles.byId(12);
dbContex.users.byId(1);
Db.libs.byId(50);

最佳答案

replaceAll() 方法用替换值替换整个匹配的字符串,因此您需要捕获想要保留的部分,并将它们插入到替换中值:

replaceAll("\\b([a-zA-Z]+\\.[a-zA-Z]+\\.)Find(\\([0-9]+\\);)", "$1byId$2")

参见regex101用于演示。

应用的更改:

  • \s 替换为 \b(字边界)
  • 删除了句点捕获 ((\\.) -> \\.)
  • Find之前和之后添加了文本捕获
  • 添加了捕获的文本以替换($1$2)

关于java - 如果 java Regex 中的常量值与该 Regex 匹配,则将其替换为其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36239290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com