【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:} new Regex("/gif/\w*\.gif").Match(htmlstr) Exroia 发表于 2022-11-15 10:30
new Regex("/gif/\w*\.gif").Match(htmlstr)
还请问大佬原字符串中有多个数据怎么办
有没有提取无壳程序完整字符串的工具?以前一直用 od。现在od不支持64位程序。dbg找字符串有点乱看不太明白。 百度一下正则就可以拉 最简单写下正则,复杂一些可以引入AngleSharp,HtmlAgilityPack 本帖最后由 极品黑车 于 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]