如何在c#中的两个字符串之间拆分字符串?

时间:2012-12-14 09:05:49

标签: c# string c#-4.0 string-parsing

我有一个包含HTML数据的String变量。现在我想将该html字符串拆分成多个字符串,然后最终将这些字符串合并为单个字符串。

这是html字符串:

<p><span style="text-decoration: underline; color: #ff0000;"><strong>para1</strong></span></p>
<p style="text-align: center;"><strong><span style="color: #008000;">para2</span> स्द्स्द्सद्स्द para2 again<br /></strong></p>
<p style="text-align: left;"><strong><span style="color: #0000ff;">para3</span><br /></strong></p>

这是我的预期输出:

<p><span style="text-decoration: underline; color: #ff0000;"><strong>para1</strong></span><strong><span style="color: #008000;">para2</span>para2 again<br /></strong><strong><span style="color: #0000ff;">para3</span><br /></strong></p>

我的分裂逻辑在下面给出......

  1. 根据</p>标记将HTML字符串拆分为令牌。
  2. 并获取第一个标记并将其存储在单独的字符串变量(firstPara)中。
  3. 现在获取每个令牌,然后删除以<p开头并以</p>开头的所有标记。并将每个值存储在单独的变量中。
  4. 4.然后取名为firstPara的第一个令牌并替换标签</p>,然后追加每个通过第3步获得的令牌。

    5.那么,现在变量firstPara具有整体价值......

    1. 最后,我们只是在firstPara ...
    2. 的末尾附加</p>

      这是我的问题......

      请你帮我解决这个问题......

2 个答案:

答案 0 :(得分:1)

这是正则表达式示例,如何做到这一点。

String pattern = @"(?<=<p.*>).*(?=</p>)";
var matches = Regex.Matches(text, pattern);
StringBuilder result = new StringBuilder();
result.Append("<p>");
foreach (Match match in matches)
{
    result.Append(match.Value);
}
result.Append("</p>");

这就是你应该如何使用Html Agility Pack

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(text);
var nodes = doc.DocumentNode.SelectNodes("//p");
StringBuilder result = new StringBuilder();
result.Append("<p>");
foreach (HtmlNode node in nodes)
{
    result.Append(node.InnerHtml);
}
result.Append("</p>");

答案 1 :(得分:1)

如果您希望将string拆分为另一个string,则可以使用string.Split(string[] separator, StringSplitOptions options)其中separatorstring数组,其中包含至少一个string将用于拆分//Initialize a string of name HTML as our HTML code string HTML = "<p><span style=\"text-decoration: underline; color: #ff0000;\"><strong>para1</strong></span></p> <p style=\"text-align: center;\"><strong><span style=\"color: #008000;\">para2</span> स्द्स्द्सद्स्द para2 again<br /></strong></p> <p style=\"text-align: left;\"><strong><span style=\"color: #0000ff;\">para3</span><br /></strong></p>"; //Initialize a string array of name strSplit to split HTML with </p> string[] strSplit = HTML.Split(new string[] { "</p>" }, StringSplitOptions.None); //Initialize a string of name expectedOutput string expectedOutput = ""; string stringToAppend = ""; //Initialize i as an int. Continue if i is less than strSplit.Length. Increment i by 1 each time you continue for (int i = 0; i < strSplit.Length; i++) { if (i >= 1) //Continue if the index is greater or equal to 1; from the second item to the last item { stringToAppend = strSplit[i].Replace("<p", "<"); //Replace <p by < } else //Otherwise { stringToAppend = strSplit[i]; //Don't change anything in the string } //Append strSplit[i] to expectedOutput expectedOutput += stringToAppend; } //Append </p> at the end of the string expectedOutput += "</p>"; //Write the output to the Console Console.WriteLine(expectedOutput); Console.Read();

的字符串

示例

<p><span style="text-decoration: underline; color: #ff0000;"><strong>para1</stro
ng></span> < style="text-align: center;"><strong><span style="color: #008000;">p
ara2</span> ?????????????? para2 again<br /></strong> < style="text-align: left;
"><strong><span style="color: #0000ff;">para3</span><br /></strong></p>

<强>输出

स्द्स्द्सद्स्द

注意:由于我的程序不支持Unicode字符,因此无法读取??????????????。因此,它被翻译为{{1}}。

谢谢, 我希望你觉得这很有帮助:)