繁体   English   中英

RegEx.Replace正在替换匹配项

[英]RegEx.Replace is replacing more than the matched

我正在尝试替换以下与xml字符串中的pattenr匹配的模式,其中模式是任何给定xml元素中存在的各种类型的属性。

因此,如果xml字符串是:

<TEST xlmns="https://www.test.com">
    <XXX>Foo</XXX>
    <YYY>Bar</YYY>
</TEST>

我想使用pattenr .*?(?:[az][a-z0-9_]*).*?((?:[az][a-z0-9_]*))(=)(\\".*?\\")删除上面的命名空间.*?(?:[az][a-z0-9_]*).*?((?:[az][a-z0-9_]*))(=)(\\".*?\\")在以下代码中:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var txt = "<TEST xlmns=\"https://www.test.com\"> <XXX>Foo</XXX> <YYY>Bar</YYY> </TEST>";

            const string pattern = ".*?(?:[a-z][a-z0-9_]*).*?((?:[a-z][a-z0-9_]*))(=)(\".*?\")";    

            var r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var m = r.Match(txt);
            if (m.Success)
            {
                String var1 = m.Groups[1].ToString();
                String c1 = m.Groups[2].ToString();
                String string1 = m.Groups[3].ToString();
                Console.Write( var1.ToString() +  c1.ToString() + string1.ToString()  + "\n");
                Console.WriteLine(RegExReplace(txt,pattern,""));
            }
            Console.ReadLine();
        }

        static String RegExReplace(String input, String pattern, String replacement)
        {
            if (string.IsNullOrEmpty(input))
                return input;

            return Regex.Replace(input, pattern, replacement, RegexOptions.IgnoreCase);
        }
    }
}

但是,在它匹配,在这种情况下<TEST xlmns="https://www.test.com">变成>时,它应该已经<TEST>

我在replace方法上做错了什么?

如果只想删除名称空间,请将正则表达式更改为:

const string pattern = "xlmns=\".*\"";

如果要删除所有属性,请使用给定的正则表达式:

const string pattern = "\w+=\".*\"";

完整代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var txt = "<TEST xlmns=\"https://www.test.com\"> <XXX>Foo</XXX> <YYY>Bar</YYY> </TEST>";

            const string pattern = "\w+=\".*\"";    

            var r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            var m = r.Match(txt);
            if (m.Success)
            {
                String var1 = m.Groups[1].ToString();
                String c1 = m.Groups[2].ToString();
                String string1 = m.Groups[3].ToString();
                Console.Write( var1.ToString() +  c1.ToString() + string1.ToString()  + "\n");
                Console.WriteLine(RegExReplace(txt,pattern,""));
            }
            Console.ReadLine();
        }

        static String RegExReplace(String input, String pattern, String replacement)
        {
            if (string.IsNullOrEmpty(input))
                return input;

            return Regex.Replace(input, pattern, replacement, RegexOptions.IgnoreCase);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM