我需要在以下类型的字符串中将字符串“name”替换为 fullName:
software : (publisher:abc and name:oracle)
需要将其替换为:
software : (publisher:abc and fullName:xyz)
现在,基本上,“name:xyz”部分可以出现在括号内的任何位置。例如
software:(name:xyz)
我正在尝试使用组和我构建的正则表达式看起来:
(\bsoftware\s*?:\s*?\()((.*?)(\s*?(and|or)\s*?))(\bname:.*?\)\s|:.*?\)$)
最佳答案
您可以使用
\b(software\s*:\s*\([^()]*)\bname:\w+
并替换为$1fullName:xyz
。请参阅regex demo和 regex graph :
详细信息
\b
- 字边界(software\s*:\s*\([^()]*)
- 捕获组 1(替换模式中的$1
是该组中捕获的值):软件
- 一句话\s*:\s*
- 包含 0 个以上空格的:
\(
- 一个(
char[^()]*
- 除(
和)之外的 0 个或多个字符
\bname
- 整个单词name
:
- 冒号\w+
- 1 个或多个字母、数字或下划线。
Java 示例代码:
String result = s.replaceAll("\\b(software\\s*:\\s*\\([^()]*)\\bname:\\w+", "$1fullName:xyz");
关于java - 如何在 Java 中使用正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005186/