正则表达式.替换是替换多于匹配的
本文关键字:替换 于匹配 正则表达式 | 更新日期: 2023-09-27 17:52:16
我试图替换以下匹配xml字符串中的模式,其中模式是任何给定xml元素中存在的各种类型的属性。
所以如果XML字符串是:
<TEST xlmns="https://www.test.com">
<XXX>Foo</XXX>
<YYY>Bar</YYY>
</TEST>
我想在下面的代码中使用模式.*?(?:[a-z][a-z0-9_]*).*?((?:[a-z][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>
我在替换方法中做错了什么?
如果您只想删除名称空间,请将正则表达式更改为:
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);
}
}
}