类似正则表达式的构造,以匹配 %([文本]),其中 [文本] 可以包含转义参数

本文关键字:文本 其中 参数 转义 包含 正则表达式 | 更新日期: 2023-09-27 18:35:04

我正在尝试解析字符串中的标记。

我想要的是这样的输入:

string input = "asdf %(text) %(123) %(a')a) asdf";

我可以通过正则表达式运行它。替换((并使其替换"%(文本(","%(123("和"%(a''(a("。

也就是说,它将匹配起始"%("和结束"("之间的所有内容,除非结束"("被转义。(但是,当然,然后你可以用另一个斜杠来转义斜杠,这样可以防止它逃脱结尾的括号......

我很确定标准正则表达式不能做到这一点,但我想知道 C# 正则表达式库的各种花哨扩展功能是否可以,而不仅仅是完全手动迭代字符串?或者其他可以做到这一点的方法?我觉得这是一个足够常见的程序,鉴于 .net 框架的巨大性,必须有一些方法来解决它而无需从头开始实施解决方案?如果我确实必须实现遍历字符串并替换为字符串。Replace((,我会的,但它看起来很不优雅。

类似正则表达式的构造,以匹配 %([文本]),其中 [文本] 可以包含转义参数

怎么样

var regex = new Regex(@"%'(.*?(?<!'')(?:'''')*')");
var result = regex.Replace(source,"");
  • %'(匹配文字%(
  • .*?匹配任何非贪婪的东西
  • (?<!'')匹配项的前一个字符不得'
  • (?:'''')*匹配零个或多个文字''(即匹配转义'
  • ')匹配文字)
这对

我有用:

    String something = "'"asdf %(text) %(123) %(a'')a) asdf'";";
    String change = something.replaceAll("%''(.*'')", "");
    System.out.println(change);

输出

"asdf  asdf";
相关文章: