lizf2019 发表于 2022-11-15 10:16

【C#】查询字符串中指定数据

本帖最后由 lizf2019 于 2022-11-15 10:17 编辑

字符串:
是一个html文件格式如下:(部分截取)
<div class="row row-gutter-20">
<div class="col col-4 col-gutter-20"><a href="/gif/4920k5k.html" title=".." class="link pic-item">
<imgdata original="//wx3.sinaimg.cn/large/0033dr8Dgy1grwj52dlbxj606o06ot8n02.jpg" alt=".."> <p>..</p>
</a></div>
<div class="col col-4 col-gutter-20">
<a href="/gif/3584251.html" title=".." class="link pic-item"><img data-original="//wx3.sinaimg.cn/large/0033dr8Dgy1gqvp9xn0fqj61400u041f02.jpg" alt=".."> <p>..</p> </a></div>


需要读取出来其中的固定格式字符串:
/gif/XXX.html(XX为任意数字或字母组合)


求助大佬们C#如何实现{:301_997:}

Exroia 发表于 2022-11-15 10:30

new Regex("/gif/\w*\.gif").Match(htmlstr)

lizf2019 发表于 2022-11-15 10:32

Exroia 发表于 2022-11-15 10:30
new Regex("/gif/\w*\.gif").Match(htmlstr)

还请问大佬原字符串中有多个数据怎么办

cq2002 发表于 2022-11-15 10:42

有没有提取无壳程序完整字符串的工具?以前一直用 od。现在od不支持64位程序。dbg找字符串有点乱看不太明白。

xinzhyu 发表于 2022-11-15 11:04

百度一下正则就可以拉

asasascao 发表于 2022-11-15 12:39

最简单写下正则,复杂一些可以引入AngleSharp,HtmlAgilityPack

极品黑车 发表于 2022-11-15 14:47

本帖最后由 极品黑车 于 2022-11-15 14:56 编辑

拿了个测试的winform写了一下,结果放到一个全局变量List<string>里,测试用的数据是lz主帖里的,打断点能得到结果已经在ls里了
递归函数里写的可能繁琐了一点,用正则应该会更快


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace winform_test
{
    public partial class Form1 : Form
    {
      public List<string> ls;
      public Form1()
      {
            InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {
            load();
      }

      private void load()
      {
            string a = "<div class=\"row row-gutter-20\"><div class=\"col col-4 col-gutter-20\"><a href=\"/gif/4920k5k.html\" title=\"..\" class=\"link pic-item\"><imgdata original=\"//wx3.sinaimg.cn/large/0033dr8Dgy1grwj52dlbxj606o06ot8n02.jpg\" alt=\"..\"> <p>..</p> </a></div><div class=\"col col-4 col-gutter-20\"><a href=\"/gif/3584251.html\" title=\"..\" class=\"link pic-item\"><img data-original=\"//wx3.sinaimg.cn/large/0033dr8Dgy1gqvp9xn0fqj61400u041f02.jpg\" alt=\"..\"> <p>..</p> </a></div>";
            string start = "/gif/";
            string last = ".html";
            ls = new List<string>();
            GetContent(a, start, last, 1);
      }

      public void GetContent(string str, string start, string last, int n)
      {
            if (str.ToLower().IndexOf(start.ToLower()) >= 0)
            {
                string str1 = str;
                if (n == 1)
                {
                  //保留关键字
                  int a1 = str.ToLower().IndexOf(start.ToLower());
                  str = str.Substring(str.ToLower().IndexOf(start.ToLower()), str.Length - str.ToLower().IndexOf(start.ToLower()));
                  int a2 = str.ToLower().IndexOf(last.ToLower());
                  if (a2 > -1)
                  {
                        str = str.Substring(0, str.ToLower().IndexOf(last.ToLower()) + last.Length);
                        ls.Add(str);
                        str1 = str1.Substring(a1 + a2 + last.Length);
                  }
                }
                else if (n == 2)
                {
                  //去除关键字
                  int a1 = str.ToLower().IndexOf(start.ToLower()) + start.Length;
                  str = str.Substring(str.ToLower().IndexOf(start.ToLower()) + start.Length, str.Length - str.ToLower().IndexOf(start.ToLower()) - start.Length);
                  int a2 = str.ToLower().IndexOf(last.ToLower());
                  if (a2 > -1)
                  {
                        str = str.Substring(0, str.ToLower().IndexOf(last.ToLower()));
                        ls.Add(str);
                        str1 = str1.Substring(a1 + a2 + last.Length);
                  }
                }
                if (str1 != str)
                {
                  GetContent(str1, start, last, n);
                }
            }
      }
    }
}
页: [1]
查看完整版本: 【C#】查询字符串中指定数据