如何匹配正则表达式中的所有字母?

时间:2014-10-16 13:13:57

标签: c# regex

我有一个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})。标签部分我想保持与原始字符串相同,而不是替换我的命名空间。

我该怎么做?

3 个答案:

答案 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

的简单参考