【问题标题】:How can I select a part from a big string starting in point A and ending in point B如何从从 A 点开始到 B 点结束的大字符串中选择一个部分
【发布时间】:2025-11-30 22:55:02
【问题描述】:

我的字符串是:

[...]
<div class="threads">
<a href="/adgagshsdh_t_54654321654" title="Title 2">
<a href="/adgagsdfdfhsdh_t_44654321654" title="Title 3">
<a href="/adgagsdfhsdh_t_54321654" title="Title 4">
<a href="/adgagsdfhsdfhsdh_t_14654321654" title="Title 5">
[...etc]
</div>
[...]

我想取出除 _t_54654321654 之外的所有东西,然后取出除 54654321654 之外的所有东西。

最终的字符串应该是这样的

54654321654

我尝试使用 indexOf,但并没有真正奏效。

我尝试搜索,但我不知道如何准确描述我正在尝试做的事情。

【问题讨论】:

  • 你最后的输出是什么?你想要它的哪一部分?
  • 你想加入 sql server 吗?
  • 你解析的是那个html吗?

标签: c# regex string select


【解决方案1】:
string whatYouNeed = "/adgadgdfhdsdfgsadfgdsg_t_54654321654".Split('_').Last();

或者

string whatYouNeed = "<a href=\"/adgadgdfhdsdfgsadfgdsg_t_54654321654\" title=\"Title\">"
    .Split('_')
    .Last()
    .Split(new string[] {"\""},StringSplitOptions.RemoveEmptyEntries)
    .First();

但如果你想处理 HTML 内容,你最好使用 Html Agility Pack

Check this question which some what similar to this and by using html agility pack

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load("test.html");
var link = htmlDoc.DocumentNode
                  .Descendants("a")
                  .First(); // assume it is First link tag what you need

string hrefValue = link.Attributes["href"].Value;
string whatYouNeed = hrefValue.Split('_').Last();

对您的 cmets 的回答

但是如果我将源代码放在字符串中而不是在 test.html 文件?

您可以如下加载html

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

还有几十个"&lt;a href"'s,其中包含不同的数字 源代码,我不需要具体的,只需要其中一个即可。

var links = htmlDoc.DocumentNode
                      .Descendants("a").ToList();

上面将返回页面中的所有链接,您可以获取任何您想要的项目,例如links[1]links[3] 等...

【讨论】:

  • 如果 op 尝试使用 split 解析完整的 html,这将不起作用。第一个 op 应该从href 中获取字符串,然后他可以使用上面的代码
  • 嗯...但是如果我在字符串中而不是在 test.html 文档中有源代码怎么办?源代码中还有几十个带有不同数字的“
【解决方案2】:

试试这个:

        int index = s.LastIndexOf('_') + 1;
        string t = s.Substring(index, s.Length - index);

【讨论】:

    【解决方案3】:

    试试:

      Regex rgx = new Regex("^.+?_t_([^\"]+?)\".+?$");
      string result = rgx.Replace(yourString, "$1");
    

    解释:它使用^匹配字符串开头的字符并移动到_t_,然后在$1中子匹配任何内容,直到",然后是",然后是任何内容直到结束@987654327 @。

    整个字符串被子匹配$1替换。

    【讨论】:

      【解决方案4】:

      用子串法试试

      喜欢

      string sub = mainString.Substring(startPosition, endPosition);
      

      【讨论】:

      • 已尝试使用子字符串:“字符文字中的字符过多”错误
      • 你得到这个错误是因为你的主字符串中有太多的字符串 sign("")。
      • 嗯,我的整个字符串是一个页面源代码(html)我通过字符串 s = reader.ReadToEnd().ToString();