用正则表达式提取字符的问题

哥斯达黎家 2009-12-25 10:51:44
情况1:<meta name="description" content="描述信息" />
情况2:<meta content="描述信息" name="description" />
情况3:<meta content='描述信息' name='description' />
情况4:<meta name=description content=描述信息 />

……情况N



如何把“描述信息”提取出来?


...全文
167 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
天府荣城 2009-12-25
  • 打赏
  • 举报
回复
顶下
-过客- 2009-12-25
  • 打赏
  • 举报
回复
13楼不符合要求吗?
哥斯达黎家 2009-12-25
  • 打赏
  • 举报
回复
情况1: <meta name="description" content="描述信息" />
情况2: <meta content="描述信息" name="description" />
情况3: <meta content='描述信息' name='description' />
情况4: <meta name=description content=描述信息 />
情况5: <meta name='description' content='描述"春哥"信息' />
情况6: <meta content="描述'曾哥'信息" name="description" />
情况7: <meta content="hello" name="keywords"> (不匹配)
-过客- 2009-12-25
  • 打赏
  • 举报
回复
正则改为

Regex reg = new Regex(@"(?is)<meta(?=[^>]*?name=(['""]?)description\1)[^>]*?content=(?<m>['""])?(?<con>(?(m)(?:(?!\k<m>).)*|\S*))\k<m>?[^>]*>");



\k<m> 对命名捕获组m的反向引用
-过客- 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 flysnow_z 的回复:]
忘记讲了,有条件的,必须有name="description"否则不匹配
[/Quote]

另一个问题没回答我,在''或""中时,描述信息中是否会有空格
wackyboy 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxcnn 的回复:]
问题是在''或""中时,描述信息中间是否会有空格,没有的话非常简单,有的话要复杂一些


C# codeRegex reg=new Regex(@"(?is)<meta[^>]*?content=(?<m>['""])?(?<con>(?(m)(?:(?!\1).)*|\S*))\k<m>?[^>]*>");
MatchCollection mc= reg.Matches(yourStr);foreach (Match min mc)
{
richTextBox2.Text+= m.Groups["con"].Value+"\n";
}
[/Quote]
过客兄 \k<m>?[^>]* 这是什么意思啊?
wackyboy 2009-12-25
  • 打赏
  • 举报
回复

@"(?i)(?<=<meta\s+(?=[^<>]*name=['""]?description\b)[^<>]*content=[""']?)[^'""\s/]+"

angel6709 2009-12-25
  • 打赏
  • 举报
回复
jf
哥斯达黎家 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wackyboy 的回复:]
C# code@"(?i)(?<=<meta\s+[^<>]*content=["']?)[^'"\s/]+"
[/Quote]

忘记讲了,有条件的,必须有name="description"否则不匹配
比如
<meta name="keywords" content="Others,C#正则表达式整理备忘" />
就不匹配content里的内容。
-过客- 2009-12-25
  • 打赏
  • 举报
回复
可以保证没有空格时,正则改为
Regex reg = new Regex(@"(?is)<meta[^>]*?content=(['""]?)(?<con>[^'""\s>]*)\1[^>]*>");
wanghui0380 2009-12-25
  • 打赏
  • 举报
回复
你们都挺快啊
-过客- 2009-12-25
  • 打赏
  • 举报
回复
问题是在''或""中时,描述信息中间是否会有空格,没有的话非常简单,有的话要复杂一些


Regex reg = new Regex(@"(?is)<meta[^>]*?content=(?<m>['""])?(?<con>(?(m)(?:(?!\1).)*|\S*))\k<m>?[^>]*>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["con"].Value + "\n";
}
silentwins 2009-12-25
  • 打赏
  • 举报
回复
速度还真快,1楼正解
mbh0210 2009-12-25
  • 打赏
  • 举报
回复

(?is)(?<=<meta.*?content=")[^"]*
波导终结者 2009-12-25
  • 打赏
  • 举报
回复
你想匹配“描述信息”这4个字?那直接匹配不就得了
wackyboy 2009-12-25
  • 打赏
  • 举报
回复

@"(?i)(?<=<meta\s+[^<>]*content=["']?)[^'"\s/]+"
-过客- 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 flysnow_z 的回复:]
13楼的正则,我一加到我的测试工具里,就死机了。晕死。
[/Quote]

13楼的正则,目前只有.NET程序中支持,绝大多数工具是不支持的
哥斯达黎家 2009-12-25
  • 打赏
  • 举报
回复
13楼的正则,我一加到我的测试工具里,就死机了。晕死。
wackyboy 2009-12-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lxcnn 的回复:]
13楼不符合要求吗?
[/Quote]
过客兄的13楼的就满足你的要求了

111,119

社区成员

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

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

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