当前位置:  开发笔记 > 编程语言 > 正文

带有标志的Python re.sub不会替换所有出现的内容

如何解决《带有标志的Pythonre.sub不会替换所有出现的内容》经验,为你挑选了3个好方法。

Python文档说:

re.MULTILINE:指定时,模式字符'^'匹配字符串的开头和每行的开头(紧跟在每个换行符之后)...默认情况下,'^'仅匹配字符串的开头...

那么当我得到以下意外结果时会发生什么?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'

Moe.. 117

看看定义re.sub:

re.sub(pattern, repl, string[, count, flags])

第四个参数是计数,你使用re.MULTILINE(它是8)作为计数,而不是标志.

如果你想使用标志,你必须编译你的正则表达式.

re.sub('^//', '', s, flags=re.MULTILINE)

re.sub在Python 2.7中添加了一个参数,因此完整定义现在是:

re.sub(re.compile('^//', re.MULTILINE), '', s)

意思就是:

re.sub(pattern, repl, string[, count, flags])

作品.



1> Moe..:

看看定义re.sub:

re.sub(pattern, repl, string[, count, flags])

第四个参数是计数,你使用re.MULTILINE(它是8)作为计数,而不是标志.

如果你想使用标志,你必须编译你的正则表达式.

re.sub('^//', '', s, flags=re.MULTILINE)

re.sub在Python 2.7中添加了一个参数,因此完整定义现在是:

re.sub(re.compile('^//', re.MULTILINE), '', s)

意思就是:

re.sub(pattern, repl, string[, count, flags])

作品.


最好有`re.compile('^ //',re.M).sub('',s)`
@pseudosudo在Python 2.7中添加了flags参数,当发布此答案时,这些参数不存在.我已将信息添加到答案中.

2> 小智..:
re.sub('(?m)^//', '', s)



3> pseudosudo..:

完整的定义re.sub是:

re.sub(pattern, repl, string[, count, flags])

这意味着如果你告诉Python参数是什么,那么你可以传递flags而不传递count:

re.sub('^//', '', s, flags=re.MULTILINE)

或者,更简洁地说:

re.sub('^//', '', s, flags=re.M)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有