我在Kaggle内核中遇到了这个正则表达式,但搞不懂它的作用:
import re
def substitute_repeats_fixed_len(text, nchars, ntimes=3):
return re.sub(r"(\S{{{}}})(\1{{{},}})".format(nchars, ntimes-1),
r"\1", text)
我一直在试验它,但发现它很难解释。在
“调试的难度是当初编写代码的两倍。因此,如果你尽可能聪明地编写代码,你就没有足够的智慧去调试它”。-布莱恩·克尼汉
Tags:
这是一个三个运算符:format、regexp match和regexp替换为容易理解,写为:
(这假设python2;如果您使用python3,请在print args周围添加()) 现在让我们来试试:
^{pr2}$我们的regexp有两组(每个都在
()
):第一组是“任何非空白字符,重复四次”。我们可以看到它匹配'abcd'
。第二组包含反向引用:match'\1'
(无论组1匹配什么),重复两次。我们看到它匹配'abcdabcd'
总之,这与
abcdabcdabcd
匹配,并再次用'\1'
替换,如我们之前所见,'abcd'
。在你可以问:但是第1组怎么知道匹配
abcd
而不是,比如说XYab
?这是给你的regexp魔法。regexp引擎将尝试不同的匹配,直到找到可以匹配整个字符串的匹配项。在相关问题 更多 >
编程相关推荐