首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.5.1 re.sub在多行上不起作用

Python3.5.1 re.sub在多行上不起作用
EN

Stack Overflow用户
提问于 2017-10-03 20:34:37
回答 1查看 335关注 0票数 2

谁能解释一下,为什么下面所有的re.sub命令都无法找到并替换匹配,而具有相同输入的re.search至少可以找到匹配?

代码语言:javascript
复制
import re
a = re.sub(b"^#define", b"***FOUND***", b"#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", re.MULTILINE)

b = re.sub(b"^#define", b"***FOUND***", b"#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", re.MULTILINE)

c = re.sub("^#define", "***FOUND***", "#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", re.MULTILINE)

d = re.sub("^#define", "***FOUND***", "#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", re.MULTILINE)

e = re.search(b"^#define", b"#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", re.MULTILINE)

f = re.search(b"^#define", b"#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", re.MULTILINE)

g = re.search("^#define","#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", re.MULTILINE)

h = re.search("^#define", "#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", re.MULTILINE)

PyCharm向我报告了以下内容作为答案:

代码语言:javascript
复制
a = {bytes} b'#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n'
b = {bytes} b'#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n'
c = {str} '#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n'
d = {str} '#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n'
e = {SRE_Match} <_sre.SRE_Match object; span=(16, 23), match=b'#define'>
f = {SRE_Match} <_sre.SRE_Match object; span=(14, 21), match=b'#define'>
g = {SRE_Match} <_sre.SRE_Match object; span=(16, 23), match='#define'>
h = {SRE_Match} <_sre.SRE_Match object; span=(14, 21), match='#define'>

A-d是错误的,因为没有任何东西按照预期进行替换。

E-f都是正确的,因为找到了相同的匹配项。

我完全不知道问题出在哪里。我知道做这件事的另一种方法,但上面的方法应该能做我想要的。

EN

回答 1

Stack Overflow用户

发布于 2017-10-03 20:43:42

我找到问题了。当指定re.MULTILINE作为标志参数时,我实际上错误地指定了re.MULTILINE的值作为计数参数!

代码语言:javascript
复制
 a = re.sub(b"^#define", b"***FOUND***", b"#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", flags=re.MULTILINE)

 b = re.sub(b"^#define", b"***FOUND***", b"#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", flags=re.MULTILINE)

 c = re.sub("^#define", "***FOUND***", "#pragma once\r\n\r\n#define WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n", flags=re.MULTILINE)

 d = re.sub("^#define", "***FOUND***", "#pragma once\n\n#define WIBBLE\t10\n\n#include <string.h>\n\n", flags=re.MULTILINE)

PyCharm返回的结果是预期的结果:

代码语言:javascript
复制
 a = {bytes} b'#pragma once\r\n\r\n***FOUND*** WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n'
 b = {bytes} b'#pragma once\n\n***FOUND*** WIBBLE\t10\n\n#include <string.h>\n\n'
 c = {str} '#pragma once\r\n\r\n***FOUND*** WIBBLE\t10\r\n\r\n#include <string.h>\r\n\r\n'
 d = {str} '#pragma once\n\n***FOUND*** WIBBLE\t10\n\n#include <string.h>\n\n'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46544725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档