我想获取字符串中第一个不可打印字符的索引,以便我可以用新字符替换它。
例如:
indexNonPrintable("Hell[nonprintable] World!") = 4
如果可能的话,我想在python中以优化的方式进行,否则我可以这样做:
i = 0
for c in str:
if (c not in string.printable)
return i
i = i + 1
答案 0 :(得分:2)
只是为了测试,单线:
def indexNonPrintable(s):
return next(i for i, x in enumerate(s) if x not in string.printable)
如果不存在不可打印的字符,该版本会引发StopIteration
;你可以把它改成:
return next((i for i, x in enumerate(s) if x not in string.printable), None)
在失败时返回None
(或使用-1
表现得像str.find
),或者:
try:
return next(i for i, x in enumerate(s) if x not in string.printable)
except StopIteration:
raise ValueError("No non-printable characters found")
当找不到匹配的字符时,表现得像str.index
并举起ValueError
。
答案 1 :(得分:1)
我会使用正则表达式。这样的事情可能有用:
import re
import string
match = re.search('[^' + re.escape(string.printable) + ']', str)
if match:
return match.start()
答案 2 :(得分:0)
您可以使用ord(c)
将每个字符转换为ascii。
i = 0
for c in str:
ascii_c = ord(c)
if ascii in range(x,y)
return i
i = i + 1
其中x和y是Table of ascii values
中字符的整数值