这个正则表达式与这个列表理解结合起来做了什么?

What does this regex do in conjuction with this list-comprehension?

我正在查看一些代码,想知道以下补丁的作用。我对前两行代码特别感兴趣。

non_printable_re = re.compile(ur'(?:%s)' % '|'.join(
    [ chr(i) for i in range(1,31) if i != 10 ]))
obj_txt = lobj.get_text()
obj_txt = non_printable_re.sub( '', obj_txt)
obj_txt = obj_txt.strip()

我知道正则表达式符号本身代表什么,但我很难弄清楚它与列表理解相结合的作用...

此代码的目标是删除不是 printable

的字符

拆分来看:

  1. 首先我们创建一个“非原则table”字符列表(ASCII table
  2. 的前 31 个字母
print([ chr(i) for i in range(1,31) if i != 10 ])
['\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\t', '\x0b', '\x0c', '\r', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e']
  1. 然后创建一个匹配任何这些字符的正则表达式
'(?:\x01|\x02|\x03|\x04|\x05|\x06|\x07|\x08|\t|\x0b|\x0c|\r|\x0e|\x0f|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1a|\x1b|\x1c|\x1d|\x1e)'

然后将这些字符中的每一个替换为''(将其删除)