为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2022-10-07 17:57:40
我有一个字符串,当一个字符串以我想用括号括起来{{m|gem-pro|*karzijan?||to turn}}的字符串开头{{m和结尾时,前面的字符串}}to turn()}}细绳: {{m|gem-pro|*karzijan?||to turn}}必需的字符串: {{m|gem-pro|*karzijan?||(to turn)}}字符串不仅可以是to turn任何字符串。
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您可以使用 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)"));


查看完整回答
反对 回复 2022-10-07
?
RISEBY

TA贡献1856条经验 获得超5个赞

您可以尝试使用此正则表达式:

{{m(.+)\|\|(.+)}}

这个替换模式:

{{m\1||(\2)}}

工作示例https ://regex101.com/r/3inQ3p/1


查看完整回答
反对 回复 2022-10-07
?
慕少森

TA贡献2019条经验 获得超9个赞

您可以使用以下正则表达式:

(\{\{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)}}


查看完整回答
反对 回复 2022-10-07
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号