【问题标题】:Regex to search class and id names in HTML files正则表达式在 HTML 文件中搜索类和 id 名称
【发布时间】:2021-03-11 00:46:25
【问题描述】:

我正在创建一个脚本,它接受用户输入的类/ID 名称,然后解析我的所有 HTML 文件并定位并打印包含它们的任何行。

我得到的最接近的是:class=["']((.*?)(USER_INPUT_NAME))[\s"']

  • 我将在 Python 中使用它,所以我知道我必须包含转义字符才能使其正常执行。

这仍然会给以下行带来问题:

  • <div class="cover-container"> 只搜索“容器”时——我最终找到了“封面容器”
  • <button type="button" class="close modal-exit" data-dismiss="modal" aria-label="Close"> 仅搜索“modal”时,它明显超出了类的范围,并在另一个标识符中找到它。

我显然不是最擅长正则表达式,我一直在尝试通过利用其他问题来解决它,但我似乎无法到达那里,因为“-”将我的正则表达式扔掉并保持在 class=" " 引号把它扔掉了。如有任何帮助,我将不胜感激。

【问题讨论】:

  • 您是否考虑过使用BeautifulSoup 来解析您的html??
  • @wwii 我最初也是这么想的,但是它如何返回该行的行号和内容?
  • 很难说,因为您的minimal reproducible example 不包含在示例数据中,并且(至少对我而言)不清楚您到底想要做什么。解析 html 你不能指望有任何 lines - 你不能指望 html 字符串 打印得很漂亮 所以行号通常没有任何意义;找到标签后,您通常可以找到兄弟姐妹、父母、邻居……以及他们的内容。

标签: python html regex


【解决方案1】:

这样的事情可以做到:

[ \"'](?:class|id)=(\")(?:(?!\1).+ | *)container(?: (?!\1).+| *)\1

https://regex101.com/r/0Zu0ze/1

【讨论】:

  • 您好,感谢您的回复!所以这适用于容器类名,但是当我尝试其他类名时它似乎不起作用。尽管如此,您使用了一些我不完全了解如何使用的正则表达式很酷的功能,所以我将使用您的示例并尝试重新设计。谢谢!
  • @SeanFromOhio 很高兴你喜欢它。如果您认为它解决了您的问题,请随时将其标记为已接受;我花了很长时间才把它弄好。如果可以的话,提供一个正则表达式/数据失败的 regex101 链接,我也许可以为您指明正确的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2023-01-30
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多