python正则替换两个标签之间_Python多个正则表达式替换

我是一个Python新手.

我一直在寻找,但发现我的观念只有一点点.

Windows上的

Python 2.7(我选择了python,因为它是多平台,结果可以在Windows上移植).

我想创建一个脚本,在文件夹中搜索* .txt UTF-8文本文件,加载内容(一个文件在彼此之后),将非ascii字符更改为html权限,然后在开始时添加html标记并且在每一行的末尾,但是标签的两个变体,一个用于文件的头部,一个用于文件的尾部,其中(头尾)由空行分隔.之后,所有结果必须写入另一个文本文件,如* .htm.要视觉:

unicode1.txt:

űnícődé text line1

űnícődé text line2

[empty line]

űnícődé text line3

űnícődé text line4

结果必须在unicode1.htm中:

űnícődé text line1

űnícődé text line2

[empty line]

űnícődé text line3

űnícődé text line3

我开始开发我的解决方案的核心,但我坚持了下来.请参阅脚本版本(为简单起见,我选择使用xmlcharrefreplace进行编码).

V1:

import re, cgi, fileinput

file="_utf8.txt"

text=""

for line in fileinput.input(file, inplace=0):

line=cgi.escape(line.decode('utf8'),1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1)

text=text+re.sub(r"$", "

", line, 1)

print text

它工作得很好,但是对于这个任务来说,fileinput不是我认为可行的方式.

V2:

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1)

text=text+re.sub(r"$", "

", line, 1)

f.close()

print text

它搞砸了结果,在行开始时关闭标记替换第一个字母等.

V3(试过多行标志):

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1, flags=re.M)

text=text+re.sub(r"$", "

", line, 1, flags=re.M)

f.close()

print text

结果相同.

V4(试过1个正则表达式而不是2个):

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

text=text+re.sub(r"^(.*)$", r"

\1

", line, 1)

f.close()

print text

结果相同.请帮忙.

编辑:我刚用hexeditor检查结果文件,每个结束标记前都有一个x0D字节!为什么?

Edit2:更改为更合理的方法

text+=re.sub(r"^(.*)$", r"

\1

", line, 1)

编辑3:使用hexeditor我看到了混乱结果的原因:每个CRLF之前的额外CR(x0D)字节.

我追踪了CR的问题,是什么造成的:串联起来

# -*- coding: utf-8 -*-

text=""

f=u"unicode text line1\r\n unicode text line2"

for line in f:

text+=line

print text

这导致:

unicode text line1\r\r\n unicode text line2

任何想法,如何解决这个问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值