我有一个txt文件,实际上是某个网页的html源代码。 在该txt文件中,有各种字符串,前面是“title =”标记。 例如
<div id='UWTDivDomains_5_6_2_2' title='Connectivity Framework'>
我有兴趣将连接框架文本引出并写入单独的文件。
像这样,有许多这样的标签,每个标题后面都有不同的文字='我需要提取的一些文字' 我想从html源文件/ txt文件中提取文本的所有此类实例,并写入单独的txt文件。文本可以包含小写字母,大写字母和数字。每个文本字符串的长度(以字符为单位)会有所不同。
我正在使用PowerGrep for windows。 Powergrep允许我使用正则表达式inout搜索文本文件。 我尝试使用搜索 标题='[A-ZA-Z0-9]
它显示正确的匹配,但它只匹配字符串的第一个字符,并且只写入与第二个txt文件匹配的文本字符串的第一个字符,而不是所有字符串。
我希望所有字符串都匹配并写入第二个文件。
正确的正则表达式或使用powergrep做我想做的事情的方法是什么?
-AD。
答案 0 :(得分:6)
我只是不确定必须要求多少次正则表达式解析HTML文件的问题(并使用“使用DOM解析器”的正确解决方案来回答)。它每天都会出现。
困难是:
因此,如果您满足所有这些(并且它是一个非常复杂但仍然不完美的正则表达式),它仍然不是100%。
HTML解析器存在是有原因的。使用它们。
答案 1 :(得分:3)
其他答案都对正则表达式进行了正确的更改,因此我将解释原始问题是什么。
方括号表示character class - 表示正则表达式将匹配这些括号内的任何字符。但是,与其他所有内容一样,它默认只匹配一次。正如正则表达式“s
”仅匹配“ssss
”中的第一个字符一样,正则表达式“[a-zA-Z0-9]
”将仅匹配“Connectivity Framework
”中的第一个字符。
通过添加repetition,可以重复匹配该字符类。最简单的方法是在它之后添加一个星号(它将匹配0或更多次出现)。因此,正则表达式“[a-zA-Z0-9]
*”将匹配一行中的多个字符,直到它遇到不在该字符类中的字符(在您的情况下,空格字符,因为您没有在括号中包含该字符) 。
正则表达式准确地描述语法可能相当复杂 - 如果有人在属性中放置了非字母数字字符(例如&符号)会怎么样?您可以尝试通过使字符集“除引号字符之外的任何内容”来捕获引号之间的所有输入,因此“'[^']*'
”通常会做正确的事情。通常你也需要记住逃避(例如,使用字符串'Mary\'s lamb'
你实际上想要捕获中间的撇号,所以一个简单的“除撇号之外的所有”字符集都不会削减它)尽管谢天谢地根据规范,XML / HTML不是问题。
尽管如此,如果有一个现有的库可以为你进行提取,这可能比滚动你自己更快更正确,所以如果可能的话,我会倾向于这个。
答案 2 :(得分:2)
我不熟悉PowerGrep,但是,你的正则表达式是不完整的。试试这个:
title='[a-zA-Z0-9 ]*'
或更好:
title='([^']*)'
答案 3 :(得分:1)
我会使用这个正则表达式来获取title属性值
<[a-z]+[^>]*\s+title\s*=\s*("[^"]*"|'[^']*'|[^\s >]*)
请注意,此正则表达式将属性值表达式与引号匹配。因此,如果需要,您必须将其删除。
答案 4 :(得分:0)
这是你需要的正则表达式
title='([a-zA-Z0-9]+)'
但是如果你要做更多这样的事情,使用解析器可能会使它更加强大和有用。
答案 5 :(得分:0)
请改为尝试:
title=\'[a-zA-Z0-9]*\'