gpt4 book ai didi

python - Python 2.7.1 的 re 模块中 re.split 函数和 re.DOTALL 标志的错误

转载 作者:太空狗 更新时间:2023-10-29 21:27:13 28 4
gpt4 key购买 nike

我有一台运行 Lion 和 Python 2.7.1 的 Mac。我注意到 re 模块中有一些非常奇怪的东西。如果我运行以下行:

print re.split(r'\s*,\s*', 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r')

我得到这个结果:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r']

但是如果我像这样使用 re.DOTALL 标志运行它:

print re.split(r'\s*,\s*', 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r', re.DOTALL)

然后我得到这个结果:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q, r']

请注意,'q, r' 被计为一次匹配而不是两次。

为什么会这样?如果我不在我的模式中使用点,我不明白为什么 re.DOTALL 标志会有所不同。我做错了什么还是有某种错误?

最佳答案

>>> s = 'a, b,\nc, d, e, f, g, h, i, j, k,\nl, m, n, o, p, q, r'
>>> re.split(r'\s*,\s*', s)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r']
>>> re.split(r'\s*,\s*', s, maxsplit=16)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q, r']
>>> re.split(r'\s*,\s*', s, flags=re.DOTALL)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r']

问题是您按位置传递 re.DOTALL,它设置 maxsplit=0 参数,而不是 flags=0争论。 re.DOTALL 恰好是常量 16

关于python - Python 2.7.1 的 re 模块中 re.split 函数和 re.DOTALL 标志的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com