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

Regex 解析html标题标记的正则表达式,regex,powershell,html-parsing,Regex,Powershell,Html Parsing,我需要解析很多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>t

我需要解析很多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>
file1.htm
100文本其他文本
file2.htm
文本100文本其他文本
file3.htm
文本1000文本其他文本
file4.htm
文本100文本其他文本
按照我的示例,我需要找到包含100或100个文件的文件名,即文件1、2和4

我的问题是我不知道如何编写正则表达式

gci "c:\my_folder" | ? {$_.extension -eq ".htm"} | 
select-string -pattern '<title>*100*</title>' |
Select-Object -Unique Path
gci“c:\my_文件夹”|?{$\.extension-eq.htm}
选择字符串-模式“*100*”|
选择对象-唯一路径

请注意,如果这对于ReGEXP可能很重要,那么标题标签不是在行的开始,而是在中间。 提前谢谢。

这样就可以了

^.*<title>(.*(100|one\shundred)[^0].*)?</title>.*$
^.*(.*(100 |一\shundred)[^0].*)*$
这应该可以

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

(.[^[:alnum:]])?(100 |一百)([^[:alnum:].])?
使模式匹配。模式语法是PCRE(与perl类似),必要时可以重新格式化

致以最良好的祝愿

卡斯滕

附言: 谨防陷阱——评论中的所有建议和警告都是正确的;不过,在您的情况下,regex方法似乎是可行的(主要是因为您正在调查“title”标记的内容,每个文件应该只有一个,并且将其分散到多行显然是愚蠢的)

(.[^[:alnum:]])?(100 |一百)([^[:alnum:].])?
使模式匹配。模式语法是PCRE(与perl类似),必要时可以重新格式化

致以最良好的祝愿

卡斯滕

附言:

谨防陷阱——评论中的所有建议和警告都是正确的;不过,在您的情况下,regex方法似乎是可行的(主要是因为您正在调查“title”标记的内容,每个文件应该只有一个,并且将其分散到多行是非常愚蠢的)。

通常,使用regex解析HTML是不好的。仅供参考。关于使用正则表达式解析HTML的强制性警告:在这一点上稍微扩展一下:
title
元素的内容可能扩展到多行;它们可能包含其他HTML标记。HTML标记通常不适合正则表达式处理,因为它的嵌套结构。也许在本例中,您确切地知道输入文件是如何生成的,并且您知道标题总是在一行上,从不包含任何困难的内容。如果是这样,那么正则表达式可能不是一种疯狂的方法。否则,您真的应该使用合适的解析器。谢谢您的回复。我读过这个链接,但是如果它不好,我不能解析它们,我有别的选择吗?编辑现在我阅读了您的上一个回复。我对PowerShell一无所知,但您应该尝试在模式中用
*
替换
*
<代码>匹配任何字符
*
表示“与我刚才所说内容相匹配的任意数量的内容”。因此,
*
表示“任意数量的字符”。但是,我重复一下,请仔细考虑正则表达式是否真的是这个工作的合适工具。通常,使用正则表达式解析HTML是不好的。仅供参考。关于使用正则表达式解析HTML的强制性警告:在这一点上稍微扩展一下:
title
元素的内容可能扩展到多行;它们可能包含其他HTML标记。HTML标记通常不适合正则表达式处理,因为它的嵌套结构。也许在本例中,您确切地知道输入文件是如何生成的,并且您知道标题总是在一行上,从不包含任何困难的内容。如果是这样,那么正则表达式可能不是一种疯狂的方法。否则,您真的应该使用合适的解析器。谢谢您的回复。我读过这个链接,但是如果它不好,我不能解析它们,我有别的选择吗?编辑现在我阅读了您的上一个回复。我对PowerShell一无所知,但您应该尝试在模式中用
*
替换
*
<代码>匹配任何字符
*
表示“与我刚才所说内容相匹配的任意数量的内容”。因此,
*
表示“任意数量的字符”。但是,我再说一遍,请仔细考虑正则表达式是否真的是这个工作的合适工具。甚至你的解决方案看起来也很完美。我也投了你一票,但我接受了jimplode的回答,因为他先回答了。再次感谢。你很和蔼。恐怕我永远学不会这些正则表达式了(谢谢。不过请注意,您接受的解决方案也会与“百分之一”匹配,这可能不是您想要的。greetz,carstenThanks感谢您的警告。正如您所看到的,我对regexp完全是新手,所以我无法了解这些小细节。:)我不会有“百分之一”的问题,因为我的母语是意大利语。为了让每个人都能理解,我用英语表达了这个问题。我需要解析意大利语字符串;)再次感谢,谢谢你。甚至你的解决方案看起来也很完美。我也投了你一票,但我接受了jimplode的回答,因为他先回答了。再次感谢。你很和蔼。恐怕我永远学不会这些正则表达式了(谢谢。不过请注意,您接受的解决方案也会与“百分之一”匹配,这可能不是您想要的。greetz,carstenThanks感谢您的警告。正如您所看到的,我对regexp完全是新手,所以我无法了解这些小细节。:)我不会有“百分之一”的问题,因为我的母语是意大利语。为了让每个人都能理解,我用英语表达了这个问题。我需要解析意大利语字符串;)再次感谢。请问[^0]是什么意思?不允许1000,哪一个是100+0@nickrulez,就像上面的评论所说的,这将阻止它匹配1000表示不允许0作为t