正则表达式是否匹配HTML中的属性?
我有一个txt文件,它实际上是某个网页的html源代码。 在该txt文件中,有各种字符串,前面有一个“title=”标记。 e、 g正则表达式是否匹配HTML中的属性?,html,regex,parsing,Html,Regex,Parsing,我有一个txt文件,它实际上是某个网页的html源代码。 在该txt文件中,有各种字符串,前面有一个“title=”标记。 e、 g 我感兴趣的是将文本连接框架提取并写入一个单独的文件 像这样,有许多这样的标签,每个标签的标题后面都有一个不同的文本=“这里有一些我需要提取的文本” 我想从html源/txt文件中提取所有这样的文本实例,并写入一个单独的txt文件。文本只能包含小写、大写字母和数字。每个文本字符串的长度(以字符为单位)将有所不同 我正在使用PowerGrep for window
我感兴趣的是将文本连接框架提取并写入一个单独的文件
像这样,有许多这样的标签,每个标签的标题后面都有一个不同的文本=“这里有一些我需要提取的文本”
我想从html源/txt文件中提取所有这样的文本实例,并写入一个单独的txt文件。文本只能包含小写、大写字母和数字。每个文本字符串的长度(以字符为单位)将有所不同
我正在使用PowerGrep for windows。Powergrep允许我使用正则表达式inout搜索文本文件。
我试着使用搜索作为
标题='[a-zA-Z0-9]
它显示正确的匹配项,但只匹配字符串的第一个字符,只写入与第二个txt文件匹配的文本字符串的第一个字符,而不是所有字符串
我希望所有字符串都匹配并写入第二个文件
使用powergrep,正确的正则表达式或方法是什么
-广告。这是您需要的正则表达式
title='([a-zA-Z0-9]+)'
但是,如果要做更多类似的事情,使用解析器可能会使它更加健壮和有用。下面是您需要的正则表达式
title='([a-zA-Z0-9]+)'
但是,如果您要做更多类似的事情,使用解析器可能会使其更加健壮和有用。试试以下方法:
title=\'[a-zA-Z0-9]*\'
请尝试以下方法:
title=\'[a-zA-Z0-9]*\'
我不熟悉PowerGrep,但是,您的正则表达式不完整。试试这个:
title='[a-zA-Z0-9 ]*'
或者更好:
title='([^']*)'
我不熟悉PowerGrep,但是,您的正则表达式不完整。试试这个:
title='[a-zA-Z0-9 ]*'
或者更好:
title='([^']*)'
其他答案都对正则表达式进行了正确的更改,因此我将解释您的原始版本的问题所在 方括号表示-表示正则表达式将匹配这些括号内的任何字符。但是,与其他所有内容一样,默认情况下它只匹配一次。正如正则表达式“
s
”将只匹配“ssss
”中的第一个字符一样,正则表达式“[a-zA-Z0-9]
”将只匹配“连接框架
”中的第一个字符
通过添加,可以使角色类重复匹配。最简单的方法是在其后面添加一个星号(它将匹配0个或多个事件)。因此,正则表达式“[a-zA-Z0-9]
*”将匹配一行中尽可能多的字符,直到它遇到不在该字符类中的字符(在本例中,是空格字符,因为括号中没有包含空格字符)
但是正则表达式要准确地描述语法可能非常复杂——如果有人在属性中放置了非字母数字字符,如符号AND,该怎么办?您可以尝试通过将字符集设置为“除引号字符以外的任何字符”来捕获引号之间的所有输入,因此“”[^']*'
”通常会做正确的事情。通常你还需要记住(例如,用字符串<代码>‘玛莉的羔羊’< /代码>),实际上你想在中间捕获撇号,所以一个简单的“所有但撇号”字符集都不会切断它。不过谢天谢地,根据规范,这不是XML/HTML的问题。
尽管如此,如果有一个现有的库可以为您进行提取,这可能比您自己的库更快、更正确,因此如果可能的话,我会倾向于这样做。其他答案都对正则表达式进行了正确的更改,因此我将解释您的原始库存在的问题 方括号表示-表示正则表达式将匹配这些括号内的任何字符。但是,与其他所有内容一样,默认情况下它只匹配一次。正如正则表达式“
s
”将只匹配“ssss
”中的第一个字符一样,正则表达式“[a-zA-Z0-9]
”将只匹配“连接框架
”中的第一个字符
通过添加,可以使角色类重复匹配。最简单的方法是在其后面添加一个星号(它将匹配0个或多个事件)。因此,正则表达式“[a-zA-Z0-9]
*”将匹配一行中尽可能多的字符,直到它遇到不在该字符类中的字符(在本例中,是空格字符,因为括号中没有包含空格字符)
但是正则表达式要准确地描述语法可能非常复杂——如果有人在属性中放置了非字母数字字符,如符号AND,该怎么办?您可以尝试通过将字符集设置为“除引号字符以外的任何字符”来捕获引号之间的所有输入,因此“”[^']*'
”通常会做正确的事情。通常你还需要记住(例如,用字符串<代码>‘玛莉的羔羊’< /代码>),实际上你想在中间捕获撇号,所以一个简单的“所有但撇号”字符集都不会切断它。不过谢天谢地,根据规范,这不是XML/HTML的问题。
不过,如果有一个现有的库可以为您进行提取,那么这可能比您自己的库更快、更正确,所以如果可能的话,我会倾向于这样做。我只是不确定需要问多少次HTML文件的正则表达式解析问题(并给出了“使用DOM解析器”的正确解决方案),它每天都会出现 困难在于:
- 在HTML中,属性可以有单引号、双引号甚至没有引号
- 类似的字符串可以出现在HTML文档本身中
- 您必须处理正确的转义;以及
- 格式错误的HTML(体面的解析器对常见错误非常健壮)