C#正则表达式
本文关键字:正则表达式 | 更新日期: 2023-09-27 18:05:02
需要一个正则表达式来匹配{
和}
。
这是我的要求。
如果输入类似
avsg{sdhsd{jh{ashdhas}hdasjhd}
输出应该是
avsgsdhsdjh{ashdhas}hdasjhd
我必须修剪{
和}
的所有出现,除非对于{
存在匹配的}
。
EDIT——一些进一步的例子:
不允许使用嵌套的方括号。我们只允许"{"answers"}"出现一次,并删除所有括号。再举几个例子。
1( 。IN:afhad{adfh}jsdfhd输出:afhad{adfh}jsdfhd
2( 。IN:afhad{a{dfh}jsdfhd输出:afhada{dfh}jsdfhd
3( 。IN:afh{ad{adfh}jsdf}hd输出:afhad{adfh}jsdfhd
4( 。输入:afhad{adfhjsdfhd输出:afhadadfhjsondfhd
string s = @"avsg{sdhsd{jh{ashdhas}hdasjhd}";
string newS = Regex.Replace(s, @"^(.*)('{.*?'})(.*)$", m =>
m.Groups[1].Value.Replace("{", "").Replace("}", "") +
m.Groups[2].Value +
m.Groups[3].Value.Replace("{","").Replace("}", "")
);
s = Regex.Replace(s, @"([^{}]*(?:'{[^{}]*'}[^{}]*)*)(?:[{}]|$)", "$1");
CCD_ 7匹配除{
或}
之外的任何字符中的零个或多个。
'{[^{}]*'}
匹配一个左大括号和一个右大括号,它们之间除了大括号之外还有任何数量的任何字符。
总之,([^{}]*(?:'{[^{}]*'}[^{}]*)*)
匹配零个或多个非大括号或匹配的大括号对,并将它们捕获到组#1中,然后(?:[{}]|$)
匹配下一个未配对的大括号或输入的末尾。用$1
(组#1的内容(替换匹配有效地删除了未配对的大括号。