我有一个文本列表,可以使用以下内容重新编写:re.sub('0000', '1111',data)
。
对shell中的一个输入替换模式^(.{4})(.{4})(.{3})(.{3})
和\1\4\2\3
工作得很好。但是,我在列表中使用此模式的尝试给了我一个
第一行不良结果,永远不会替换后者。我在这里错过了什么?
"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'\1\4\2\3',data))
o.close()
答案 0 :(得分:7)
"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})"$
答案 1 :(得分:1)
如果您仍想使用.read()
,请尝试以下操作:
import re
output = open("output.txt","w")
input = open("input.txt").read()
output.write(re.sub(r'^(.{4})(.{4})(.{4})(.{3})$',
r'\1\4\2\3',
input,
flags=re.M))
output.close()
答案 2 :(得分:0)
import re
t = """0000-22N-06W-01
0000-22N-06W-02\t\t
0000-22N-06W-03 \t\t\t\t
0000-22N-06W-04"""
print t,'\n'
print re.sub(r'^(.{4})(.{4})(.{4})([^ \t\r\n]+)',
r'\1\4\2\3',
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个小时才明白正则表达式需要在re.M
之后写flags=
,因为re.sub的签名是re.sub(pattern, repl, string, count=0, flags=0)