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

标签 java c# regex

我有一个字符串 {{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 组
  • (?=}}) 正面前瞻,断言直接在右边的是}}

Pattern demo

在替换中,使用 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/

相关文章:

java - 用java解析xml文件并将结果转换为javabean

c# - 如何以编程方式连接到需要 SSH 隧道的远程数据库服务器?

c# - 允许人们修改程序

regex - 使用正则表达式提取 r ngram

python - 在 Beautifulsoup 的 find_all 中使用正则表达式

regex - 删除数字周围的引号

java - 用Java制作tar文件

java - Graphics/JPanel 尺寸不是以像素为单位测量的吗?

java - 将父类(super class)中的@Sql 与子类中的@Sql 合并

c# - Jqgrid中如何显示间接数据