Python中的while循环只要正则表达式匹配成功

4

好的,我知道在循环中使用正则表达式编辑字符串可能不是最佳方法。只是为了探究兴趣:我需要如何构建一个循环,只要它匹配就执行一个正则表达式模式,然后一直循环执行直到没有匹配为止?我正在使用Python进行此操作。

match = re.search(r'pattern, repl, str)
while match (is True, == True?):
   sub = re.sub(r'pattern, repl, str)
else:
   Do something else

1
re.sub 通常对其找到的所有非重叠匹配执行替换(尽管您可以通过传递 count 参数来限制它),因此将其放在循环中是相当不寻常的,尽管我猜如果替换的结果创建了更多与模式匹配的子字符串,则这样做是有意义的。但是,正如 nnnmmm 指出的那样,您没有在循环内更新 match,因此它要么永远不会运行,要么就是一个无限循环。 - PM 2Ring
目标是从HTML中的p标签内删除行尾。因此,我搜索从<p>到\n的任何内容,删除\n并重复正则表达式。当我只是一遍又一遍地重复相同的正则表达式行时,它对我的目的起作用。但是,我认为也应该有一个循环解决方案。 - Pjoern
1
@Pjoern如果你想要正确地处理HTML,请使用HTML解析器。 - bruno desthuilliers
1个回答

4

match is not None,因为根据文档match在没有匹配到的情况下返回None。但你在循环中没有更新match。你是想做这样的事情吗:

match = re.search(pattern, repl, str)
while match is not None:
    str = re.sub(pattern, repl, str)
    match = re.search(pattern, str)

(请注意,search 方法不接受 repl 参数)

没错,这个可以运行。当然,在循环中你必须使用re.search。 - Pjoern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接