【问题标题】:while-loop in python as long as regex matches只要正则表达式匹配,python中的while循环
【发布时间】:2018-01-18 20:43:08
【问题描述】:

好的,我知道这可能不是在循环中使用正则表达式编辑字符串的最佳方法。只是为了感兴趣:我将如何构建一个循环,只要它匹配就执行一个正则表达式模式,在一个循环中运行并在它不再命中时停止?我在 python 中这样做。

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

【问题讨论】:

  • re.sub 通常会在它找到的所有非重叠匹配上执行替换(尽管您可以通过传递 count arg 来限制它),因此将它放在像这样的循环中是相当不寻常的那,尽管我想如果替换的结果创建更多与模式匹配的子字符串是有意义的。但是,正如 nnnmmm 指出的那样,您没有在循环内更新 match,因此它要么永远不会运行,要么将成为无限循环。
  • 目标是从 html 的 p-tags 中删除行尾。所以我搜索从

    到 \n 的任何内容,删除 \n 并重复正则表达式。当我一次又一次地重复相同的正则表达式行时,它适用于我的目的。但我认为也应该有一个循环解决方案。

  • @Pjoern 如果您想正确处理 html,请使用 html 解析器。

标签: python regex while-loop


【解决方案1】:

match is not None,因为match 在不匹配的情况下返回None,根据the docs。但是您没有在循环中更新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 放在循环中。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2016-08-30
相关资源
最近更新 更多