正则表达式解析html标题标记

问题描述:

我需要解析很多html文件,以便知道哪些标题标记中包含特定的文本。正则表达式解析html标题标记

让我们假设标题是

file1.htm 
<title>100 text other text</title> 
file2.htm 
<title>text 100 text other text</title> 
file3.htm 
<title>text 1000 text other text</title> 
file4.htm 
<title>text one hundred text other text</title> 

效法我我需要找到一个包含100或一百文件名,也就是文件1,2和4

我的问题是我不知道怎么写正则表达式

gci "c:\my_folder" | ? {$_.extension -eq ".htm"} | 
select-string -pattern '<title>*100*</title>' | 
Select-Object -Unique Path 

请注意,如果这可能是正则表达式重要的是,标题标签是不是在行的开始,但是在中间。 在此先感谢。

+1

通常,使用正则表达式来解析HTML是不好的。只是供参考。 – 2011-04-12 14:59:36

+1

有关使用正则表达式解析HTML的强制性警告:http://*.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-04-12 15:00:23

+0

要在此上展开一点点:'title'元素的内容可能会延伸到多行;他们可能包含其他HTML标记。由于其嵌套结构,HTML标记通常不适合正则表达式处理。也许在这种情况下,你确切知道你的输入文件是如何制作的,而且你知道标题总是在一行中,并且从不包含任何困难。 ** IF **如此,那么正则表达式可能不是一个疯狂的方法。否则,你真的应该使用合适的解析器。 – 2011-04-12 15:03:09

这应该这样做。

^.*<title>(.*(100|one\shundred)[^0].*)?</title>.*$ 
+0

非常感谢。它似乎很好。 ;) – 2011-04-12 15:13:57

+0

我可以问你,[^ 0]是什么意思? – 2011-04-12 15:21:55

+0

不允许1000,其中100 + 0 – 2011-04-12 15:24:20

尝试

<title>(.*[^[:alnum:]])?(100|one hundred)([^[:alnum:]].*)?</title> 

的模式相匹配。模式语法是PCRE(就像perl),如果需要的话可以重新配置它。

最好的问候,

卡斯滕

PS: 提防的陷阱 - 所有建议和警告,从注释是持有;在你的情况下,正则表达式的方法似乎是可行的(主要是因为你正在研究'标题'标签的内容,每个文件应该只有一个文件,并将其分布在多行中将是简单的愚蠢)。

+0

谢谢collapsar。即使你的解决方案似乎是完美我也给你一个upvote,但我接受jimplode的回答,因为他先回答了。再次感谢。你很高明。恐怕我永远不会学习这些正则表达式。 :( – 2011-04-12 15:16:15

+0

谢谢。不过,请注意,您接受的解决方案将匹配'

第0123,',这可能不是您想要的。greetz,carsten – <span class="text-secondary"> <small> <a rel="noopener">collapsar</a></small></span> <span>2011-04-12 15:21:48</span>
+0

感谢您的警告。正如您所见,我完全一样新手与正则表达式,所以我无法捕捉到这些小细节。:)我不会有“百分之一”的问题,因为我的母语是意大利语。为了让大家都能理解,我用英文表达了这个问题。我需要解析意大利字符串;)再次感谢。 – 2011-04-12 15:27:50