我需要在以下类型的字符串中将字符串'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|:.*?\)$)
答案 0 :(得分:1)
您可以使用
\b(software\s*:\s*\([^()]*)\bname:\w+
,并替换为$1fullName:xyz
。请参见regex demo和regex graph:
详细信息
\b
-单词边界(software\s*:\s*\([^()]*)
-捕获组1(替换模式中的$1
是该组中捕获的值的占位符):
software
-一个单词\s*:\s*
-一个:
包含0+空格\(
-一个(
字符[^()]*
-除(
和)
以外的0个或更多字符\bname
-整个词name
:
-冒号\w+
-1个或多个字母,数字或下划线。Java示例代码:
String result = s.replaceAll("\\b(software\\s*:\\s*\\([^()]*)\\bname:\\w+", "$1fullName:xyz");