当字符串以{{m|gem-pro|*karzijan?||to turn}}
开头并以{{m
结尾时,我有一个字符串}}
,我想用to turn
括起来的方括号将()
括起来在}}
字符串:
{{m|gem-pro|*karzijan?||to turn}}
必需的字符串:
{{m|gem-pro|*karzijan?||(to turn)}}
该字符串不仅可以是to turn
,而且可以是任何字符串。
答案 0 :(得分: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)"));
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以使用以下正则表达式:
class MyDict<T> {
var dict = [Int:T]()
}
let c1 = MyDict<A>()
let c2 = MyDict<B>()
和替换项:
(\{\{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
演示: https://regex101.com/r/yoo9KG/2/
说明:
{{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\|[^}]*\|)
开头,后跟0到N个字符的字符串,直到到达{{m
为止,这些字符不是}
,|
位于您的{{ 1}}结构。可以通过{{m...|...|..}}
\1
将匹配结构中的最后一个字符串,并将其存储在第二个捕获组中。 ([^|}]*)
将捕获最后2个(\}\})
并将其存储在第3组中。java代码:
}
输出:
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);