正则表达式 re.sub 列表中的文件



我有一个文本列表,可以很好地重新.sub,例如:re.sub('0000', '1111',data)

^(.{4})(.{4})(.{3})(.{3}) shell 中一个输入的带有1423的替换模式也很好用。 但是,我尝试在列表中使用此模式给了我一个第一行出现不良结果,永远不要替换后者。我在这里错过了什么?

"0000-22N-06W-01"
"0000-22N-06W-02"
"0000-22N-06W-03"
"0000-22N-06W-04"
import re
o = open("output.txt","w")
data = open("input.txt").read()
o.write(re.sub(r'^(.{4})(.{4})(.{3})(.{3})', r'1423',data))
o.close()
"0000-22N-06W-01"
"0000-22N-06W-02"
"0000-22N-06W-03"
"0000-22N-06W-04"
import re
output = open("output.txt","w")
input = open("input.txt")
for line in input:
    output.write(re.sub(r'^(.{4})-(.{3})-(.{3})-(.{2})$', r'1-4-2-3', line))
input.close()
output.close()

注意:如果您的数据中确实有",则应将正则表达式更改为此表达式:

^"(.{4})-(.{4})-(.{3})-(.{3})"$

正则表达式 101 演示

如果您仍想使用 .read() ,请尝试以下操作:

import re
output = open("output.txt","w")
input = open("input.txt").read()
output.write(re.sub(r'^(.{4})(.{4})(.{4})(.{3})$',
                    r'1423', 
                    input, 
                    flags=re.M))
output.close()

这个 ?

import re
t = """0000-22N-06W-01
0000-22N-06W-02tt
0000-22N-06W-03   tttt
0000-22N-06W-04"""
print t,'n'
print re.sub(r'^(.{4})(.{4})(.{4})([^ trn]+)',
             r'1423',
             t,
             flags= re.M)

生产

0000-22N-06W-01
0000-22N-06W-02     
0000-22N-06W-03                 
0000-22N-06W-04 
0000-01-22N-06W
0000-02-22N-06W     
0000-03-22N-06W                 
0000-04-22N-06W

曾几何时,我花了 1 个小时才明白正则表达式需要在 flags= 之后编写re.M,因为 re.sub 的签名是re.sub(pattern, repl, string, count=0, flags=0)

最新更新