【发布时间】:2014-02-25 16:41:01
【问题描述】:
抱歉标题令人困惑。我试图找出一个简单的正则表达式问题,但无法弄清楚解决方案是什么。
我有一个来自较大 HTML 文档的 HTML sn-p。
<td class="grade">100.0</td><td class="teacher">Mathias, Jordan</td>
其他正则表达式将两者分开,给他们那些类名。我使用肯定的look-ahead 来检查. 或,(句号或逗号),并分别为他们分配年级或老师的班级。
问题来了,当我想检查这些标签之间的代码是否为空白时。
- 即:
<td class="grade"></td>
我想使用积极的回顾来检查班级是年级还是老师(grade|teacher)。另外,我想检查一下><(空标签的连接)之间是否真的没有任何东西。
到目前为止,这就是我所拥有的:(?<=.*(teacher|grade)*.+>?)[^.](?=</td>)
注意:这是在 Python 中
【问题讨论】:
-
HTML 不是一个钉子状的问题,放下那个正则表达式锤子。选择一个 HTML 解析器,比如 BeautifulSoup。
-
强制,HTML 最好用 html 解析器解析,而不是正则表达式
-
我将 Regex 与 BeautifulSoup 结合使用。考虑到 HTML 的大小及其复杂性,BeautifulSoup 在呈现 HTML 时毫无用处,除非 Regex 更改类以便 BeautifulSoup 可以解析并找到它。 @MartijnPieters
-
soup.find_all('td', class_=['teacher', 'grade'], text=True)会找到你所有的元素。 -
@jayumz:如果输入的 HTML 没有类,则使用正则表达式匹配文本内容:
soup.find_all('td', text=re.compile(','))查找所有带有逗号文本的td元素。
标签: python html regex lookbehind