Python-使用正则表达式查找多个匹配项并按特定顺序报告
我试图从HTML源文件中提取一些行。下面的一个是简化的,但它是相同的想法。使用下面的示例,我试图将其以数字顺序输出…即表格1、表格2、表格3、表格4。问题是第二个循环在第二轮时重新启动。所以我得到了:表格一,表格二,表格三,表格二。如何编辑以使第二个循环继续提取表单4文本 代码Python-使用正则表达式查找多个匹配项并按特定顺序报告,python,regex,loops,break,Python,Regex,Loops,Break,我试图从HTML源文件中提取一些行。下面的一个是简化的,但它是相同的想法。使用下面的示例,我试图将其以数字顺序输出…即表格1、表格2、表格3、表格4。问题是第二个循环在第二轮时重新启动。所以我得到了:表格一,表格二,表格三,表格二。如何编辑以使第二个循环继续提取表单4文本 代码 重新导入 行='bla bla bla表格1一些文本…表格 2更多的文字?布拉布拉布拉布拉表格3一些文字。。。 表格4更多文本?” 对于re.finditer(“(.*?”,行,re.S)中的匹配: 打印匹配组(1) 对
重新导入
行='bla bla bla表格1一些文本…表格
2更多的文字?布拉布拉布拉布拉表格3一些文字。。。
表格4更多文本?”
对于re.finditer(“(.*?”,行,re.S)中的匹配:
打印匹配组(1)
对于re.finditer(“(.*?”,行,re.S)中的match1:
打印匹配1.组(1)
打破
对于re.finditer(“(.*?”),行,re.S中的匹配:
打印(匹配组(1))
我修改代码:
for match in re.finditer('(<form>(.*?)</form>)|(<form1>(.*?)</form1>)', line, re.S):
if None != match.group(4):
print(match.group(4))
else:
print(match.group(2))
对于re.finditer(“(.*?)|(.*?)”中的匹配,行,re.S):
如果没有!=匹配组(4):
打印(匹配组(4))
其他:
打印(匹配组(2))
返回的match
对象有一个方法start
,该方法获取所需组的索引,并返回字符串中匹配组的起始索引(即行
)。然后,通过切片行
(例如行[某些索引:
),可以让内部循环从该索引开始,而不是从行
开始。
一个更合适、更简单的方法是让你的内部re.finditer
接受match.group(1)
,而不是行
然而,除非目标HTML的模式足够简单,否则手动处理HTML通常不是一个好主意。您可以使用一些简单易用而复杂的库来解析和提取HTML中的数据。这就是您想要的吗
>>> for item in re.finditer(r'<form[12]?>([^<]+)',line):
... item.groups()[0]
...
'Form 1'
'Form 2'
'Form 3'
'Form 4'
>>>对于re.finditer(r')([^这是我正在使用的。但是请注意,有两种模式…和替代模式。因此问题是如何循环它们,以便它按以下顺序搜索:,。是的,第一个代码有问题。我修改了代码。可能重复:
for match in re.finditer('(<form>(.*?)</form>)|(<form1>(.*?)</form1>)', line, re.S):
if None != match.group(4):
print(match.group(4))
else:
print(match.group(2))
>>> for item in re.finditer(r'<form[12]?>([^<]+)',line):
... item.groups()[0]
...
'Form 1'
'Form 2'
'Form 3'
'Form 4'