在C#中从字符串中删除字符串

时间:2013-12-20 07:18:49

标签: c# string

我有一个字符串就像这样

orem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum, neque eu 
varius placerat, <p class="how-pkg"> leo diam viverra velit, </p> a commodo 
nibh metus nec orci. Nulla pharetra ut augue quis blandit.

我想删除一个位于此<p class="how-pkg"> ------ </p>

内的字符串值

有没有办法直接完成这项任务?

没有多次拆分字符串

预期结果:leo diam viverra velit,

6 个答案:

答案 0 :(得分:4)

使用html敏捷包并编写

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(yourText);
var text = doc.DocumentNode.SelectNodes("/p[@class='how-pkg']").InnerText;

答案 1 :(得分:2)

仅使用字符串操作。

var searchForStart = "<p class=\"how-pkg\">";
int startIndex = input.IndexOf(searchForStart ) + searchFor.Length;
var searchForStop = "</p>";
int stopIndex = input.IndexIf(searchForStop, startIndex);

var output = text.Substring(startIndex, stopIndex - startIndex);

答案 2 :(得分:1)

假设source是你的字符串:

var start = "<p class=\"how-pkg\">";
var p0 = source.IndexOf(start);
var p1 = source.IndexOf("</p>");
var s = source.Substring(p0 + start.Length, p1 - p0);

像这样的东西

答案 3 :(得分:1)

string s = "orem ipsum dolor sit amet, consectetur adipiscing elit. Fusce rutrum, neque eu varius placerat, <p class=\"how-pkg\"> leo diam viverra velit, </p> a commodo nibh metus nec orci. Nulla pharetra ut augue quis blandit.";
int start = s.IndexOf("<p class=\"how-pkg\">") + 20;
int end = s.IndexOf("</p>", start);

string result = s.Substring(start, end - start);

答案 4 :(得分:1)

如果您的标记结构总是相同,那么您可以使用正则表达式来提取这样的值:

    var result = Regex.Match("<p class="how-pkg">hello</p>", "(?<=<p class="how-pkg">).*(?=</p>)").Value;

如果您的标记结构发生变化,那么您可以使用命名组捕获标记和值,如下所示:

    <(?<tag>\.*)>(?<text>.*)</\k<tag>>

仅从hello

中捕获<one>hello</one>
    (?<=<.*>).*(?=</\w*>)

例如

    var result = Regex.Match("<p class="how-pkg">hello</p>", "(?<=<.*>).*(?=</\w*>)").Value;

答案 5 :(得分:1)

最简单的方法:

  • 搜索<p(或<p class
  • 在此之后搜索> - 您找到了一个标记(忽略了指定的类)和开放点
  • (optinal)检查您是否支持此课程
  • 搜索</p> - 您找到了结果以及继续搜索的点(如有必要)。