re.M对我的代码不起作用

时间:2017-05-29 13:29:52

标签: python regex

我有这段代码:

import re

s = """line1
   line2"""

print(re.sub("^", "=", s, re.M))

,输出为:

=line1
   line2

即。 REG。表达" ^"只查找字符串的开头,而不是文档中所说的行的开头。我确实意识到错误在我的代码中,但在哪里?

Genneraly我需要替换字符串中每行的所有前导空格。

谢谢!

3 个答案:

答案 0 :(得分:1)

那是因为您将flags参数作为位置传递。尝试:

print(re.sub("^", "=", s, flags=re.M))

您执行的操作已将re.M传递给count参数。标志在count之后。在这种情况下更好地使用关键字。

通过该修复,我得到:

=line1
=   line2

答案 1 :(得分:1)

在您的示例中,您将re.M作为第四个参数传递给re.sub,这是允许的替换总数。碰巧re.M是一个数字常量8,所以你的代码相当于:

re.sub("^", "=", s, count=8)

正确的版本是将re.M作为关键字参数传递:

import re

s = """line1
   line2"""

print(re.sub("^", "=", s, flags=re.M))

答案 2 :(得分:0)

您可以将标记移至re.compile,以确保re.sub不会误解它:

print(re.sub(re.compile("^", re.M), "=", s))

举个例子:

import re

s = """line1
   line2"""
line_start = re.compile("^", re.M)
print(re.sub(line_start, "=", s))
# =line1
# =   line2