我有一个Helper,它会掩盖一些字符串,然后将它作为xml保存在请求/响应记录器上。当我在我的环境中进行测试时它工作正常,但是当其他客户端开始测试时,由于XML的命名空间,我遇到了一些问题。继承我的正则表达式:
formatedString = Regex.Replace( formatedString , "<c.HeresMyString>[0-14]+([0-14]{8})</c.HeresMyString>" , "<c.HeresMyString>****************$1</c.HeresMyString>" , RegexOptions.IgnoreCase );
问题是,如果客户端更改标记的命名空间也会更改。因此,我需要匹配eveything而不是<c.HeresMyString>
和</c.HeresMyString>
。像<**HeresMyString>
和</**HeresMyString>
之类的东西。
编辑:
这些例子很有效。但我想只替换xml标记的内容,这部分正好[0-14]+([0-14]{8})
。标签部分我想保持与原始字符串相同,而不是替换我的命名空间。
我该怎么做?
答案 0 :(得分:1)
我想你想要这样的东西,
formatedString = Regex.Replace( formatedString , "<[^<>]*HeresMyString>[0-14]+([0-14]{8})</[^\/]*HeresMyString>" , "<c.HeresMyString>****************$1</b.HeresMyString>" , RegexOptions.IgnoreCase );
答案 1 :(得分:1)
使用正则表达式处理XML和/或HTML是一种固有的破坏设计。这个修复可能会给你更多的里程数,但是或多或少不可能预测它将来会如何破裂,所以(充其量)是一个脆弱的解决方案。
使用XML tools available in the platform正确构建XML文档 ,避免这种废话。
答案 2 :(得分:1)
我不确定我是否理解正确,但是如果您只是想让它适用于原始字符串中的任何命名空间,请使用.+
模式作为命名空间:
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
// Your string
var formatedString = "<newNameSpace.HeresMyString>100000000000</newNameSpace.HeresMyString>";
formatedString = Regex.Replace( formatedString , "<.+HeresMyString>[0-14]+([0-14]{8})</.+HeresMyString>" , "<b.HeresMyString>****************$1</b.HeresMyString>" , RegexOptions.IgnoreCase );
Console.WriteLine(formatedString);
}
}
这是working example和正则表达式http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet
的简单参考