Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用正则表达式查找多个匹配项并按特定顺序报告_Python_Regex_Loops_Break - Fatal编程技术网

Python-使用正则表达式查找多个匹配项并按特定顺序报告

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

我试图从HTML源文件中提取一些行。下面的一个是简化的,但它是相同的想法。使用下面的示例,我试图将其以数字顺序输出…即表格1、表格2、表格3、表格4。问题是第二个循环在第二轮时重新启动。所以我得到了:表格一,表格二,表格三,表格二。如何编辑以使第二个循环继续提取表单4文本

代码
重新导入
行='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'