我有一个字符串 {{m|gem-pro|*karzijan?||to turn}}
当一个字符串以 {{m
开头并以}}
我想用 ()
括号字符串包围 to turn
}}
字符串:
{{m|gem-pro|*karzijan?||转}}
必需的字符串:
{{m|gem-pro|*karzijan?||(转)}}
字符串不仅可以是转
,还可以是任意字符串。
最佳答案
您可能会使用 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)"));
关于java - 正则表达式查找字符串并根据条件替换它或添加额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55701411/