获取Python中第一个不可打印字符的索引

时间:2018-01-03 01:48:02

标签: python

我想获取字符串中第一个不可打印字符的索引,以便我可以用新字符替换它。

例如: indexNonPrintable("Hell[nonprintable] World!") = 4

如果可能的话,我想在python中以优化的方式进行,否则我可以这样做:

i = 0    
for c in str:
   if (c not in string.printable)
      return i
   i = i + 1

3 个答案:

答案 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

中字符的整数值