python - 澄清正则表达式功能/.findall() 返回不在捕获组中的匹配项
问题描述
似乎我无法将注意力集中在正则表达式上。
我的字符串:
<h1 id="jdp-title-job-title2">Manager Global E-Commerce (m/f/d)</h1>
<h1 id="jdp-title-job-title"></h1>
<h5>We are looking for a new colleague in ZF Aftermarket’s Global Digital Team at our location in Neuwied.
Req Id: 40112BR</h5>
<h6>Your tasks as Manager Global E-Commerce (m/f/d): </h6>
第一次正则表达式尝试
(?<=>).+(?=<)
使用前瞻/后视似乎是个好主意,因为它不是我不想要的标签字符。它符合我从上面的字符串中需要的东西,但是
re.findall(r'(?<=>).+(?=<)', s)
返回完整的搜索字符串。为什么?(在括号中设置“.+”以使其成为捕获组无济于事。
第二次正则表达式尝试
<(h[1-9]).*<\/\1>
是第二种方法。它匹配整个事物,包括标签。然而
re.findall(r'<(h[1-9]).*<\/\1>', s)
结果是
0 = {str} 'h1'
1 = {str} 'h5'
2 = {str} 'h6'
这并不奇怪,因为捕获组 1 仅围绕着盯着标签。结合收集到的知识有:
第三次正则表达式尝试
<(h[1-9]).*>(.+)<\/\1>
Lookahed/lookbehind 不适用于 .* 所以我尝试制作我想要第二个捕获组的字符串部分。不幸的是我的代码:
re.findall(r'<(h[1-9]).*>(.+)<\/\1>', s)
返回完整的胡言乱语
0 = {tuple}
0 = {str} 'h1'
1 = {str} '\r <h1 id="jdp-title-job-title">'
__len__ = {int} 2
1 = {tuple}
0 = {str} 'h5'
1 = {str} 'We are looking for a new colleague in ZF Aftermarket’s Global
Digital Team at our location in Neuwied.\r Req Id: 40112BR'
__len__ = {int} 2
那里甚至有些东西与这个正则表达式不匹配,或者不是捕获组的一部分,或者是多行的(如 h5 的内容)。我不明白发生了什么事。
我想要的是
首先,我想了解发生了什么。其次,我需要上面给出的字符串中的 HTML 标记所包含的内容。
我想要的输出如下所示:
0 = {tuple}
0 = {str} 'Manager Global E-Commerce (m/f/d)'
1 = {tuple}
0 = {str} 'Your tasks as Manager Global E-Commerce (m/f/d): '
奖励:理想情况下,正则表达式也匹配 h5 标签的多行内容,但在主要问题解决后,我愿意承担这个问题。
非常感谢!
解决方案
推荐阅读
- r - 为什么我收到与种子相关的错误?
- android - Android Navigation Drawer 所有内容消失
- kotlin - 构造伴生对象是什么:IntEntityClass
(UserRatings) 是什么意思? - python - 从python返回字符串到C++
- java - Tomcat 忽略手动设置 Keep-Alive 标头
- arrays - strcmp(string,string) 用于回文检查器
- android - Flutter 找不到 ANDROID_HOME 路径
- javascript - Unsplash Api 下载特定大小的图像
- google-maps - Google Maps Flutter setMapStyle 未生效 - 城市名称仍在显示
- javascript - 更改 kbd 标记元素的背景颜色,在按下一个键后,然后恢复为原始颜色