2014-10-16 45 views
0

我有一個Helper這個屏蔽一些字符串,然後將它保存爲一個XML請求/響應記錄器。當我在環境中測試時,它工作正常,但是當其他客戶端開始測試時,由於XML的命名空間,我有一些問題。繼承人我的正則表達式:如何匹配Regex中的所有字母?

formatedString = Regex.Replace(formatedString , "<c.HeresMyString>[0-14]+([0-14]{8})</c.HeresMyString>" , "<c.HeresMyString>****************$1</c.HeresMyString>" , RegexOptions.IgnoreCase); 

問題是,如果客戶端更改標籤的命名空間也會改變。所以,而不是<c.HeresMyString></c.HeresMyString>我需要匹配eveything。像<**HeresMyString></**HeresMyString>。編輯: 這些例子工作。但是我想只替換xml標籤的內容,這部分完全是[0-14]+([0-14]{8})。標籤部分我想保持原來的字符串相同,而不是替代我的名字空間。

我該怎麼做?

+0

您可以使用點進行分割並進行字符串比較。 – adityaswami89 2014-10-16 13:15:36

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – spender 2014-10-16 13:27:04

回答

1

我想你想這樣的事情,

formatedString = Regex.Replace(formatedString , "<[^<>]*HeresMyString>[0-14]+([0-14]{8})</[^\/]*HeresMyString>" , "<c.HeresMyString>****************$1</b.HeresMyString>" , RegexOptions.IgnoreCase); 
+0

我認爲OP *認爲*他們想要「像這樣的東西」,但真的需要一些完全不同的東西。典型的XY問題。 – spender 2014-10-16 13:26:35

1

處理XML和/或HTML使用正則表達式本身是一個壞的設計。這種修復方式可能會給你多一點裏程,但它或多或少不可能預測未來將如何破解,所以(最好)是一個脆弱的解決方案。

使用XML tools available in the platform建立一個XML文檔正確和避免這類廢話。

+0

我認爲你是對的。因爲生病需要獲取傳入的名稱空間並將其放在替換字符串上。 – gog 2014-10-16 13:43:01

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

+0

謝謝,它的工作。但是ive在OP中做了一個編輯,解釋了更多。我想保留原始字符串的標籤部分。我的意思是,不能用' gog 2014-10-16 13:41:33