关于Regex函数的说明/.findall()返回不在捕获组中的匹配项

2024-09-28 23:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我好像不能把心思放在正则表达式上。你知道吗

我的字符串:

<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>

第一次Regex尝试

(?<=>).+(?=<)

使用lookahead/behind似乎是个好主意,因为它不需要我不想要的标记字符。它与上面的字符串匹配,但是

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/lookback不适用于。*因此我尝试将字符串中需要第二个捕获组的部分设置为。不幸的是,我的代码:

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): '

优点:理想情况下regex也匹配h5标签的多行内容,但这是一个问题,我愿意在主要问题解决后再处理。你知道吗

非常感谢!你知道吗


Tags: 字符串inreidtitlemanagerjobh1