首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HTML中匹配属性的Regex?

在HTML中匹配属性的Regex?
EN

Stack Overflow用户
提问于 2009-01-21 11:30:25
回答 6查看 12.5K关注 0票数 1

我有一个txt文件,它实际上是一些网页的html来源。在该txt文件中,有多个字符串,前面有一个"title=“标记。例如:

代码语言:javascript
复制
<div id='UWTDivDomains_5_6_2_2'  title='Connectivity Framework'> 

我感兴趣的是将文本连接框架提取出来并写入一个单独的文件。

就像这样,有许多这样的标记,每个标签在title='some之后都有一个不同的文本,我需要从html源文件/ txt文件中提取所有这样的文本实例,然后写到一个单独的txt文件中。文本只能包含小写、大写字母和数字。每个文本字符串的长度(以字符为单位)将有所不同。

我在windows上使用PowerGrep。Powergrep允许我搜索带有正则表达式inout的文本文件。我试着用搜索作为标题=‘a-za-z0-9

它显示正确的匹配,但它只匹配字符串的第一个字符,并且只写入与第二个txt文件匹配的文本字符串的第一个字符,而不是所有字符串。

我希望所有字符串都被匹配并写入第二个文件。

使用powergrep,正确的正则表达式或做我想做的事情的方法是什么?

-AD。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-21 11:36:16

我不熟悉PowerGrep,但是,您的正则表达式是不完整的。试试这个:

代码语言:javascript
复制
title='[a-zA-Z0-9 ]*'

或者更好的是:

代码语言:javascript
复制
title='([^']*)'
票数 3
EN

Stack Overflow用户

发布于 2009-01-21 12:17:12

我只是不确定需要问多少次HTML文件的正则表达式解析问题(并用正确的解决方案“使用DOM解析器”来回答)。每天都会出现。

困难是:

  • 在HTML属性中可以有单引号、双引号甚至没有引号;
  • 类似的字符串可以出现在HTML文档本身中;
  • 你必须处理正确的逃逸;
  • 格式错误的HTML (体面的解析器对常见错误非常健壮)。

因此,如果你满足所有这些(这是一个相当复杂,但仍然不完善的指标),它仍然不是100%。

HTML解析器的存在是有原因的。用它们。

票数 6
EN

Stack Overflow用户

发布于 2009-01-21 12:15:28

其他的答案都给出了正则表达式的正确更改,所以我将解释原来的问题是什么。

方括号表示一个字符类 -意味着正则表达式将匹配这些括号中的任何字符。但是,与其他一切一样,默认情况下它只匹配一次。正如正则表达式"s“只匹配"ssss”中的第一个字符一样,正则表达式"[a-zA-Z0-9]“将只匹配"Connectivity Framework”中的第一个字符。

通过添加重复,可以使该字符类重复匹配。最简单的方法是在它之后添加一个星号(这将匹配0或更多的出现)。因此,regex "[a-zA-Z0-9]*“将匹配一行中的字符,直到它碰到不属于该字符类的字符(在您的例子中,空格字符,因为您没有将它包含在括号中)。

但是,要准确地描述语法,Regexes可能非常复杂--如果有人在属性中添加了非字母数字字符(如符号和符号),该怎么办?您可以尝试捕获引号之间的所有输入,方法是将字符集设置为“除引号字符之外的任何内容”,因此"'[^']*'“通常会做正确的事情。通常,您也需要记住转义(例如,使用字符串'Mary\'s lamb',您确实希望捕获中间的撇号,这样简单的“除撇号”字符集就不会剪掉它),但谢天谢地,根据规范,这不是XML/HTML的问题。

尽管如此,如果有一个现有的库可以为您进行提取,这可能比滚动您自己的更快和更正确,所以如果可能的话,我会倾向于这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/464913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档