簡體   English   中英

從字符串中刪除特定的控制字符(\\n \\r \\t)

[英]Deleting specific control characters(\n \r \t) from a string

我有相當多的文本,其中包括 \\n \\t 和 \\r 等控制字符。 我需要用一個簡單的空格替換它們-->“”。 執行此操作的最快方法是什么? 謝謝

我認為最快的方法是使用str.translate()

import string
s = "a\nb\rc\td"
print s.translate(string.maketrans("\n\t\r", "   "))

版畫

a b c d

編輯:由於這再次變成了關於性能的討論,這里有一些數字。 對於長字符串, translate()方式比使用正則表達式快:

s = "a\nb\rc\td " * 1250000

regex = re.compile(r'[\n\r\t]')
%timeit t = regex.sub(" ", s)
# 1 loops, best of 3: 1.19 s per loop

table = string.maketrans("\n\t\r", "   ")
%timeit s.translate(table)
# 10 loops, best of 3: 29.3 ms per loop

這大約是 40 倍。

你也可以試試正則表達式:

import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)
>>> re.sub(r'[\t\n\r]', ' ', '1\n2\r3\t4')
'1 2 3 4'

如果要規范化空格(用單個空格替換一個或多個空格字符的運行,並去除前導和尾隨空格),可以使用字符串方法來完成:

>>> text = '   foo\tbar\r\nFred  Nurke\t Joe Smith\n\n'
>>> ' '.join(text.split())
'foo bar Fred Nurke Joe Smith'

使用正則表達式

re.sub(r'\s+', ' ', '1\n2\r3\t4')

沒有正則表達式

>>> ' '.join('1\n\n2\r3\t4'.split())
'1 2 3 4'
>>>

my_string是要刪除特定控制字符的字符串。 由於字符串在python中是不可變的,在替換操作之后,您需要將其分配給另一個字符串或重新分配它:

my_string = re.sub(r'[\n\r\t]*', '', my_string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM