Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python re.M不适用于我的代码_Python_Regex - Fatal编程技术网

Python re.M不适用于我的代码

Python re.M不适用于我的代码,python,regex,Python,Regex,我有以下代码: import re s = """line1 line2""" print(re.sub("^", "=", s, re.M)) 输出为: =line1 line2 i、 e.注册。表达式“^”只查找字符串的开头,而不是文档中所述的行的开头。我确实意识到错误在我的代码中,但在哪里 一般来说,我需要替换字符串中每行的所有前导空格 谢谢大家! 这是因为您将标志参数作为位置传递。尝试: print(re.sub("^", "=", s, flags=re.M))

我有以下代码:

import re

s = """line1
   line2"""

print(re.sub("^", "=", s, re.M))
输出为:

=line1
   line2
i、 e.注册。表达式“^”只查找字符串的开头,而不是文档中所述的行的开头。我确实意识到错误在我的代码中,但在哪里

一般来说,我需要替换字符串中每行的所有前导空格


谢谢大家!

这是因为您将
标志
参数作为位置传递。尝试:

print(re.sub("^", "=", s, flags=re.M))
执行所做的操作将
re.M
传递到
count
参数。标志位于计数之后。在这种情况下,最好使用关键字

通过该修复,我得到:

=line1
=   line2

在您的示例中,您将
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))

您可以将标志移动到
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
python是“win32上的python 3.6.0(v3.6.0:41DF79263A111201612年12月23日08:06:12)[MSC v.1900 64位(AMD64)]”