我有这段代码:
import re
s = """line1
line2"""
print(re.sub("^", "=", s, re.M))
,输出为:
=line1
line2
即。 REG。表达" ^"只查找字符串的开头,而不是文档中所说的行的开头。我确实意识到错误在我的代码中,但在哪里?
Genneraly我需要替换字符串中每行的所有前导空格。
谢谢!
答案 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