我对Java正则表达式有所了解,在我的项目中,我必须做一些文本替换。例如我有这条线
db.articles.Find(112);
我想用匹配此正则表达式的byId替换每次出现的Find
\ S [A-ZA-Z] +(\)。[α-ZA-Z] +(\)查找\([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);
答案 0 :(得分:2)
replaceAll()
方法用替换值替换整个匹配的字符串,因此您需要捕获要保留的部分,并将它们插入替换值:
replaceAll("\\b([a-zA-Z]+\\.[a-zA-Z]+\\.)Find(\\([0-9]+\\);)", "$1byId$2")
请参阅regex101了解演示。
已应用更改:
\s
替换为\b
(字边界)(\\.)
- > \\.
)Find
$1
和$2
)