如何使用c#的REGEX删除字符之间的空格,制表符,换行符?

时间:2011-03-11 15:41:38

标签: c# regex file

如何使用C#从文本文件中存储的以下字符串中删除">" and "<"">" and "</"之间的空格,制表符,新行号以及<wiretype />之间的空格?

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetReport xmlns="http://tempuri.org/">
      <RequestContext xmlns="">
        <userid>reds</userid><fcnumber>1</fcnumber><accountaccess /><wiretype /><currency /><accountheader>All</accountheader><clientname>Begum Noor</clientname><requestid>9999</requestid><ntid>reds</ntid>
      </RequestContext>
      <ReportParams>xyz</ReportParams>
    </GetReport>
  </soap:Body>
</soap:Envelope>

我尝试了以下操作,但没有删除所有空格:

static void Main(string[] args)
{
    string filename = args[0];
    StringBuilder result = new StringBuilder();
    if (System.IO.File.Exists(filename))
    {
        using (StreamReader streamReader = new StreamReader(filename))
        {
            String line;
            Regex r = new Regex(@">\s+<");
            while ((line = streamReader.ReadLine()) != null)
            {
                string newLine = r.Replace(line, @"><");
                result.Append(newLine);
            }
        }
    }
    Console.WriteLine(result);
    Console.ReadLine();

    using (FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate))
    {
        StreamWriter streamWriter = new StreamWriter(fileStream);
        streamWriter.Write(result);
        streamWriter.Close();
        fileStream.Close();
    }
}

2 个答案:

答案 0 :(得分:7)

你为什么不用:

XDocument xdoc = XDocument.Load(filename);
xdoc.Save(filename, SaveOptions.DisableFormatting);

它将删除xml文档中的所有格式。有关详细信息,请参阅SaveOptions.DisableFormatting

答案 1 :(得分:0)

我猜您最好的方法是获取</>之间的所有信息。

<[^>]*/>

然后,您可以使用替换所有语言来替换xml的匹配部分。

( |\n|\t) to be replaced by ""