我曾经经常跑步。
$s =~ s/[^[:print:]]//g;
使用Perl来清除非可打印字符。
在Python中没有POSIX正则表达式类,我不能编写[:print:]表示我想要的意思。在Python中,我不知道有什么方法可以检测字符是否可打印。
你会怎么做?
编辑:它必须支持Unicode字符。string.printable方式将愉快地从输出中剥离它们。curses.ascii.isprint对于任何Unicode字符都将返回false。
我曾经经常跑步。
$s =~ s/[^[:print:]]//g;
使用Perl来清除非可打印字符。
在Python中没有POSIX正则表达式类,我不能编写[:print:]表示我想要的意思。在Python中,我不知道有什么方法可以检测字符是否可打印。
你会怎么做?
编辑:它必须支持Unicode字符。string.printable方式将愉快地从输出中剥离它们。curses.ascii.isprint对于任何Unicode字符都将返回false。
在Python中没有POSIX正则表达式类
使用regex
库时会有:https://pypi.org/project/regex/
它得到良好的维护,支持Unicode正则表达式、Posix正则表达式等等。用法(方法签名)与Python的re
非常相似。
从文档中可以看到:
[[:alpha:]]; [[:^alpha:]]
支持POSIX字符类。这些通常被视为
\p{...}
的另一种形式。
(我不是相关方,只是一个用户。)
''.join([x if x in string.printable else '' for x in Str])
"".join([c if 0x21<=ord(c) and ord(c)<=0x7e else "" for c in ss])
- evandrix以下内容是由Ants Aasma和shawnrad提供的答案改编而来:
nonprintable = set(map(chr, list(range(0,32)) + list(range(127,160))))
ord_dict = {ord(character):None for character in nonprintable}
def filter_nonprintable(text):
return text.translate(ord_dict)
#use
str = "this is my string"
str = filter_nonprintable(str)
print(str)
在Python 3.7.7上进行测试
Python无效的非打印字符U+00A0
错误原因 复制的代码中的空格与Python中的格式不同;
解决方案 删除空格并重新输入空格。例如,上图中红色部分是异常空格。删除并重新输入空格即可运行;
去除“空格”,
import re
t = """
\n\t<p> </p>\n\t<p> </p>\n\t<p> </p>\n\t<p> </p>\n\t<p>
"""
pat = re.compile(r'[\t\n]')
print(pat.sub("", t))
我使用了这个:
import sys
import unicodedata
# the test string has embedded characters, \u2069 \u2068
test_string = """"ABC. 6", "}"""
nonprintable = list((ord(c) for c in (chr(i) for i in range(sys.maxunicode)) if
unicodedata.category(c) in ['Cc','Cf']))
translate_dict = {character: None for character in nonprintable}
print("Before translate, using repr()", repr(test_string))
print("After translate, using repr()", repr(test_string.translate(translate_dict)))
regex.sub(r'[^[:print:]]+', '', text)
即可。当然,还有很多其他选择。 - Wiktor Stribiżewregex.sub(r'[^[:print:]]+', '', text)
即可。当然,还有很多其他选择。 - undefined