正则表达式查找字符串并替换它或根据条件添加额外字符

我有一个字符串,当一个字符串以我想用括号括起来{{m|gem-pro|*karzijan?||to turn}}的字符串开头{{m和结尾时,前面的字符串}}to turn()}}

细绳: {{m|gem-pro|*karzijan?||to turn}}

必需的字符串: {{m|gem-pro|*karzijan?||(to turn)}}

字符串不仅可以是to turn任何字符串。


慕虎7371278
浏览 157回答 3
3回答

肥皂起泡泡

您可以使用 2 个具有正向前瞻性的捕获组:({{m(?:\|[^\|]+)*\|\|)([^}]+)(?=}})在 Java 中String regex = "(\\{\\{m(?:\\|[^\\|]+)*\\|\\|)([^\\}]+)(?=\\}})";关于图案(捕获组 1{{m从字面上匹配(?:\|[^\|]+)*重复 0+ 次匹配|,然后不匹配|\|\|匹配 ||)关闭组 1(捕获组 2[^}]+匹配 1+ 次不 })关闭组 2(?=}})正向前瞻,断言右边是 }}模式演示在替换中,使用 2 个捕获组:$1($2)例如在 C# 中:string pattern = @"({{m(?:\|[^\|]+)*\|\|)([^}]+)(?=}})";string input = @"{{m|gem-pro|*karzijan?||to turn}}";Console.WriteLine(Regex.Replace(input, pattern, @"$1($2)"));

RISEBY

您可以尝试使用此正则表达式:{{m(.+)\|\|(.+)}}这个替换模式:{{m\1||(\2)}}工作示例:https ://regex101.com/r/3inQ3p/1

慕少森

您可以使用以下正则表达式:(\{\{m\|[^}]*\|)([^|}]*)(\}\})和替换:\1(\2)\3输入:{{m|gem-pro|*karzijan?||to turn}}{{m|gem-pro|*karzijan?||abc}}{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}{{do nothing}}#do nothing输出:{{m|gem-pro|*karzijan?||(to turn)}}{{m|gem-pro|*karzijan?||(abc)}}{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}{{do nothing}}#do nothing演示: https ://regex101.com/r/yoo9KG/2/说明:(\{\{m\|[^}]*\|)将捕获{{m以 0 到 N 字符开头的字符串,}直到到达 a |,即位于您的{{m...|...|..}}结构中的最后一个字符。捕获组可以通过反向引用\1([^|}]*)将匹配结构中的最后一个字符串并将其存储在第二个捕获组中。(\}\})将捕获最后 2 个}并将其存储在第 3 组中。您在替换中使用了 3 个反向引用,并用括号括住第二个以达到您的结果。爪哇代码:String input = "{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}";String output = input.replaceAll("(\\{\\{m\\|[^}]*\\|)([^|}]*)(\\}\\})", "$1($2)$3");System.out.println(output);输出:{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java