替换多行字符串中的每个字符(空格除外),\r\n如何替换?

2024-09-27 07:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

多行字符串,例如

abc 123
456 def

想要的结果(序数+2):

^{pr2}$

如果我使用:

text = "abc 123\n456 def"
add2=''.join(chr(ord(c)+2) for c in text)
print text
print add2

{r>{r>第二行的{r>也不能被替换{cd3}的第二行。在

另外,这是question的后续内容。在


Tags: 字符串textinfordefabcprintjoin
3条回答

你的另一个问题表明你可能正在翻译一个很长的字符串(PDF文件)。在这种情况下,使用stringtranslate方法比在字符串上逐字符循环更快:

在测试.py公司名称:

import string

infile='filename.pdf'
outfile='newfile.pdf'

with open(infile,'r') as f:
    text=f.read()

def using_translate():
    start_chars=''.join(chr(n) for n  in range(256) if not chr(n).isspace())
    end_chars=''.join(chr((ord(c)+2)%256) for c in start_chars)
    table = string.maketrans(start_chars,end_chars)
    return text.translate(table)

def using_for_c_in_text():
    return ''.join(chr((ord(c) + 2)%256) if not c.isspace() else c for c in text)

这将显示使用1M pdf文件运行的时间的结果:

^{pr2}$

注:很多答案(包括我的答案)都使用了chr(ord(c) + 2)。如果ord(c)+2>=256,则抛出一个TypeError。为了避免类型错误,可以使用chr((ord(c) + 2)%256)。在

add2 = ''.join(chr(ord(c) + 2) if c not in "\n\r " else c for c in text)

您只需检查字符是否为字母数字,否则保留原始字符:

add2 = ''.join(chr(ord(c)+2) if c.isalnum() else c for c in text)

请注意,将此应用于某些字符(如“y”、“z”、“9”、“0”等)可能不会产生预期的结果。一、 e.,'y'不会变成'a',而是'{'。在

相关问题 更多 >

    热门问题