【发布时间】:2011-04-12 14:53:06
【问题描述】:
我需要解析大量的 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 或 100 的文件名,即文件 1,2 和 4。
我的问题是我不会写正则表达式
gci "c:\my_folder" | ? {$_.extension -eq ".htm"} |
select-string -pattern '<title>*100*</title>' |
Select-Object -Unique Path
请注意,如果这对正则表达式很重要,那么标题标签不是在行的开头而是在中间。 提前致谢。
【问题讨论】:
-
通常情况下,使用正则表达式解析 HTML 是不好的。仅供参考。
-
关于使用正则表达式解析 HTML 的强制性警告:stackoverflow.com/questions/1732348/…
-
在这一点上稍微扩展一下:
title元素的内容可能会扩展到多行;它们可能包含其他 HTML 标记。由于其嵌套结构,HTML 标记通常不适合正则表达式处理。也许在这种情况下,您确切地知道您的输入文件是如何制作的,并且您知道标题总是在一行中,并且从不包含任何困难的东西。 IF 就是这样,那么正则表达式可能不是一个疯狂的方法。否则,你真的应该使用合适的解析器。 -
感谢您的回复。我已经阅读了链接,但是如果它很糟糕并且我无法解析它们,我还有其他选择吗?编辑。现在我阅读了您的最后回复。
-
我对 PowerShell 一无所知,但您应该尝试将模式中的
*替换为.*。.匹配任何字符。*的意思是“与我刚才所说的事情相匹配的任何事情”。所以.*的意思是“任意数量的任意字符”。但是,我再说一遍,请仔细考虑正则表达式是否真的适合这项工作。
标签: regex powershell html-parsing