我想提取出 这个URL+“a业务员”这样的东西,正则怎么写?能实现么
我有试过这样写,但是效果不佳
strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
string[] strHref = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
strHref[i] = m.Groups[1].Value;
strJieGuo = strJieGuo + strHref[i] + "\n";
i++;
}
}
这个 href=\"(?<url>.*?)\">([^<>]+)< 匹配出来只有 “a业务员”
而正则我单独用 href=\"(?<url>.*?)\" 就可以匹配出前面的url
请问一下我要怎么写才可以把 http://xxoo.html">a业务员 一起匹配出来?
小弟拜谢了
12 个解决方案
#1
最简单的办法,分别匹配,然后再加在一起就可以了阿。
a="href=\"(?<url>.*?)\">([^<>]+)<";
b=href=\"(?<url>.*?)\"
c=b+a
a="href=\"(?<url>.*?)\">([^<>]+)<";
b=href=\"(?<url>.*?)\"
c=b+a
#2
try...
string test = "<a href=\"http://xxoo.html\">a业务员</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
#3
<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>
strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
string[] strHref = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
strHref[i] = "Url="+m.Groups["url"].Value+"\tText="+m.Groups["text"].Value;
strJieGuo = strJieGuo + strHref[i] + "\n";
i++;
}
}
#4
楼主的例子中href="后有一个空格,正常的URL中一般是不会出现空格的,需要确认一下是否真的存在
如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则
如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则
string test = "<a href=\" http://xxoo.html\">a业务员</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=""(?<url>[^""]+)""[^>]*>(?<text>.+?)</a>");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
#5
重复了……
刚连沙发都没有……
刚连沙发都没有……
#6
大哥你这个匹配出来text全部为空
#7
示例,你试试吧:
示例:
<a href="html/1.html">第一个页面</a>
1.
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
2.
MatchCollection mc= Regex.Matches(str, @" <a[^> ]*href=([ ' " "]?)(? <url> [^ ' " "> \s]*)\1?[^> ]*> (? <text> [^ <]
*) </a> ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
Response.Write(m.Groups[ "url "].Value);
Response.Write(m.Groups[ "text "].Value);
}
3.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
@"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
m.Groups["text"].Value);
}
4.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
@"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
m.Groups["text"].Value);
}
#8
果然是高手,完全正确,非常感谢,这就结贴
#9
复制错了。。。。
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>
#10
谢谢各位大哥哈
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。
#11
Mark.
#12
很合理。 ^_^ 客客师傅厉害。
#1
最简单的办法,分别匹配,然后再加在一起就可以了阿。
a="href=\"(?<url>.*?)\">([^<>]+)<";
b=href=\"(?<url>.*?)\"
c=b+a
a="href=\"(?<url>.*?)\">([^<>]+)<";
b=href=\"(?<url>.*?)\"
c=b+a
#2
try...
string test = "<a href=\"http://xxoo.html\">a业务员</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
#3
<a href=" http://xxoo.html">a业务员</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>
-------------------------------------------
<a href=(['"]?)(?<url>[^ "']+)\1>(?<text>.*?)</a>
strZhengZe = "href=\"(?<url>.*?)\">([^<>]+)<";
Regex reg = new Regex(strZhengZe, RegexOptions.IgnoreCase);
MatchCollection mc = reg.Matches(strSource);
if (mc.Count > 0)
{
string[] strHref = new string[mc.Count];
int i = 0;
foreach (Match m in mc)
{
strHref[i] = "Url="+m.Groups["url"].Value+"\tText="+m.Groups["text"].Value;
strJieGuo = strJieGuo + strHref[i] + "\n";
i++;
}
}
#4
楼主的例子中href="后有一个空格,正常的URL中一般是不会出现空格的,需要确认一下是否真的存在
如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则
如果存在,那就不能要这么高的灵活性了,只匹配href=后“"”的正则
string test = "<a href=\" http://xxoo.html\">a业务员</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=""(?<url>[^""]+)""[^>]*>(?<text>.+?)</a>");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
#5
重复了……
刚连沙发都没有……
刚连沙发都没有……
#6
大哥你这个匹配出来text全部为空
#7
示例,你试试吧:
示例:
<a href="html/1.html">第一个页面</a>
1.
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
2.
MatchCollection mc= Regex.Matches(str, @" <a[^> ]*href=([ ' " "]?)(? <url> [^ ' " "> \s]*)\1?[^> ]*> (? <text> [^ <]
*) </a> ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
Response.Write(m.Groups[ "url "].Value);
Response.Write(m.Groups[ "text "].Value);
}
3.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
@"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
m.Groups["text"].Value);
}
4.
MatchCollection mc = Regex.Matches(@"<a href=""html/1.html"">第一个页面</a>",
@"(?isn)<a.+?href=""(?<url>[^""]+)[^>]+>(?<text>.+?)</a>");
foreach (Match m in mc)
{
MessageBox.Show(m.Groups["url"].Value + Environment.NewLine +
m.Groups["text"].Value);
}
#8
果然是高手,完全正确,非常感谢,这就结贴
#9
复制错了。。。。
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>
<a href=(['"]?)\s*(?<url>[^ "']+)\1>(?<text>[\s\S]*?)</a>
#10
谢谢各位大哥哈
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。
第一个最先整出正确答案,所以分大部分给他了,由于我这里上csdn非常卡,我接贴的的时候才看到楼上大哥的回复。。。实在不好意思。。。
#11
Mark.
#12
很合理。 ^_^ 客客师傅厉害。