正则表达式 模糊匹配

cangku2012 2010-12-02 01:26:07
原先我的思路是根据我输入的标题,找到链接地址,但是现在我想改一下,能不能利用我输入的不完整的标题,同样找到我的链接地址,例如:
这是我的html<a href="/article/2010/1202/article_21642.html" title="四大食用油巨头被约谈:两节不得涨价" target="_blank">四大食用油巨头被约谈:两节不得涨价</a>
原先输入:四大食用油巨头被约谈:两节不得涨价,就可以得到/article/2010/1202/article_21642.html,现在我想只输入四大食用油巨头,也同样可以得到/article/2010/1202/article_21642.html这个,请问这个要怎么实现啊,
...全文
636 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-12-03
  • 打赏
  • 举报
回复
er...
版主或是管理员,这结了的帖子就放生吧,人家16楼回复的内容肯定了我的答案,算是帖子能有头有尾,不算灌水的吧.
兔子-顾问 2010-12-02
  • 打赏
  • 举报
回复
regex.match改为
Matches返回的就是一个集合了。你foreach这个集合即可。
cangku2012 2010-12-02
  • 打赏
  • 举报
回复
不好意思啊,又得麻烦大家了。上面说的是当我输入这个标题中的部分关键字,可以根据标题找到对应链接。现在我想再把它改一下,能否当我输入一些关键字,把包括这些关键字的标题都搜索出来了?比如:当我输入(食用油)如果这个网页中有以下标题包含,1.今日食用油行情。2.食用油信息,3.保持食用油供给稳定,食用油不得涨价。怎样才能把这些标题都找出呢。
q107770540 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cangku2012 的回复:]

谢谢了,对于正则我不懂,正在学,如果你们谁有这方面的资料,希望能告诉我。真的很感谢。
[/Quote]
http://download.csdn.net/source/2844387
cangku2012 2010-12-02
  • 打赏
  • 举报
回复
谢谢了,对于正则我不懂,正在学,如果你们谁有这方面的资料,希望能告诉我。真的很感谢。
兔子-顾问 2010-12-02
  • 打赏
  • 举报
回复
public static void Test()
{
string html = @"<a href=""/article/2010/1202/article_21642.html"" title=""四大食用油巨头被约谈:两节不得涨价"" target=""_blank"">四大食用油巨头被约谈:两节不得涨价</a>";
Regex reg = GetRegexLikeText("食用油巨头");
Console.WriteLine(reg.IsMatch(html));
}

public static Regex GetRegexLikeText(string keyword)
{
return new Regex(@"(?<=<a[^>]+?href=(['""]?))[^'""\s]+(?=\1[^>]*>((?!</a).)*?" + Regex.Escape(keyword) + @".*?</a>)");
}

写成方法了。你传递参数时候用你的textbox1.text即可。
灬嘻嘻哈哈灬 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cangku2012 的回复:]

谢谢大家帮忙,但是我试了大家的方法,我只能输入标题的前几个字符才有用,当我输入中间的几个字符就会没用。例如输入:四大食用油巨头时是有用的,当我输入:巨头被约谈:两节不,或者两节不得涨价
时方法就会没用,能再帮我改一下吗?谢谢了
[/Quote]看5楼。。
不懂装懂 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cangku2012 的回复:]
我把4L的改成这样为什么就不行了。
string title = @"(?<=<a[^>]+?href=(['""]?))[^'""\s]+(?=\1[^>]*>((?!</a).)*?" + '"' + TextBox2 .Text + '"' + @".*?</a>)";
m = Regex.Match(s, title);
if (m.Success)
{
strin……
[/Quote]
红色部分删掉
cangku2012 2010-12-02
  • 打赏
  • 举报
回复
我把4L的改成这样为什么就不行了。
string title = @"(?<=<a[^>]+?href=(['""]?))[^'""\s]+(?=\1[^>]*>((?!</a).)*?" + '"' + TextBox2 .Text + '"' + @".*?</a>)";
m = Regex.Match(s, title);
if (m.Success)
{
string c = m.m.Value;
}
c取得总是空值,我就把它分开写的啊
不懂装懂 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cangku2012 的回复:]
谢谢大家帮忙,但是我试了大家的方法,我只能输入标题的前几个字符才有用,当我输入中间的几个字符就会没用。例如输入:四大食用油巨头时是有用的,当我输入:巨头被约谈:两节不,或者两节不得涨价
时方法就会没用,能再帮我改一下吗?谢谢了
[/Quote]
看4L
cangku2012 2010-12-02
  • 打赏
  • 举报
回复
谢谢大家帮忙,但是我试了大家的方法,我只能输入标题的前几个字符才有用,当我输入中间的几个字符就会没用。例如输入:四大食用油巨头时是有用的,当我输入:巨头被约谈:两节不,或者两节不得涨价
时方法就会没用,能再帮我改一下吗?谢谢了
灬嘻嘻哈哈灬 2010-12-02
  • 打赏
  • 举报
回复
        /// <summary>
/// 查询相应标题,返回Url地址。。
/// </summary>
/// <param name="htmlSource">网页源代码。。</param>
/// <param name="keyword">单个关键词。。</param>
/// <returns>查询结果,如果没有匹配项则数组长度为0。。</returns>
static public string[] GetUrlString(string htmlSource, string keyword)
{
string pattern = string.Format("(?<=<a\\s+href=\")[^\"]+(?=\"[^>]*>[^<]*(?:{0})+[^<]*</a>)", keyword);
MatchCollection ms = Regex.Matches(htmlSource, pattern, RegexOptions.IgnoreCase);
string[] urlString = new string[ms.Count];
for (int i = 0; i < ms.Count; i++)
{
urlString[i] = ms[i].Value;
}
return urlString;
}
兔子-顾问 2010-12-02
  • 打赏
  • 举报
回复
string result = Regex.Match(yourHtml,@"(?<=<a[^>]+?href=(['""]?))[^'""\s]+(?=\1[^>]*>((?!</a).)*?四大食用油巨头.*?</a>)").Value;


需要的时候替换文本即可。
q107770540 2010-12-02
  • 打赏
  • 举报
回复

void Main()
{
string html=@"<a href=""/article/2010/1202/article_21642.html"" title=""四大食用油巨头被约谈:两节不得涨价"" target=""_blank"">四大食用油巨头被约谈:两节不得涨价</a>";

Match m =Regex.Match(html,@"(?i)<a\shref=""(?<href>.*?)""\stitle=""四大食用油巨头.*"".*?>.*?</a>");
if(m.Success)
{
Console.WriteLine(m.Groups["href"].Value);
// /article/2010/1202/article_21642.html
}
}
不懂装懂 2010-12-02
  • 打赏
  • 举报
回复
不知道你原来怎么写的正则,提供个思路
匹配下面href="中的值
<a href="/article/2010/1202/article_21642.html" title="四大食用油巨头被约谈:两节不得涨价" target="_blank">四大食用油巨头被约谈:两节不得涨价</a>
正则:
(?is)(?<=<a[^>]*href=")[^>"]*(?="[^>]*title="四大食用油巨头被约谈:两节不得涨价[^>"]*)
这部分可以作为变量进行传值
当匹配
<a href="/article/2010/1202/article_21642.html" title="白菜" target="_blank">四大食用油巨头被约谈:两节不得涨价</a>
正则:
(?is)(?<=<a[^>]*href=")[^>"]*(?="[^>]*title="白菜[^>"]*)
就可以了

Return门徒 2010-12-02
  • 打赏
  • 举报
回复
兄弟,这样做不行吧,如果同名文件出现他总会找最后一个匹配的那个

你这个是新闻类的,在数据库的新闻表里应该都有新闻标题与他对应生成的URL
他们是一一以应的啊~!

以上为建议~!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧