我有问题。我想要做的是对数据进行排序并在某些点创建新行。目前,我的代码如下所示:

from __future__ import print_function
import re
NDoc = raw_input("Enter name of new document ")+".txt"
log = open(NDoc, 'w')
file = raw_input("Enter a file to be sorted ")
extfile = file+".txt"
xfile = open(file+".txt")

for line in xfile:
    l=line.strip()
    l=re.sub("\n","",l)
    n=re.sub("(\B)(?=((MTH|HST|ENG)[|]))","\n",line)

    if len(n) > 0:
        nl=n.split("\n")
        for item in nl:
                log.write(item+"\n")
                    #print(item)

print ("The data from",extfile,"has been sorted into",NDoc)

一切正常,除了在第三项 (ENG|) 之后,我的数据中出现了新行。例如,如果我的数据文件是这样的:
MTH|lettersandnumbersHST|lettersandnumbersENG|lettersandnumbers
MTH|lettersandnumbersHST|lettersandnumbersENG|lettersandnumbers
MTH|lettersandnumbersHST|

我希望它看起来像这样:
MTH|lettersandnumbers
HST|lettersandnumbers
ENG|lettersandnumbers
MTH|lettersandnumbers
HST|lettersandnumbers
ENG|lettersandnumbers
MTH|lettersandnumbers
HST|

但它反而给了我这个:
MTH|lettersandnumbers
HST|lettersandnumbers
ENG|lettersandnumbers

MTH|lettersandnumbers
HST|lettersandnumbers
ENG|lettersandnumbers

MTH|lettersandnumbers
HST|

现在我认为在添加新的\n 之前,执行 l=re.sub("\n","",l) 会将所有的\n 替换为空,那么为什么仍然有额外的行,但仅在 ENG 之后?

预先感谢您提供任何见解。

最佳答案

您为线路使用了错误的名称。

l=line.strip()
l=re.sub("\n","",l)

应该
line=line.strip()
line=re.sub("\n","",line)

或者干脆
line=line.strip().replace('\n', '')

关于Python 正则表达式删除\n,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31661307/

10-11 07:46