我有几根这样的弦:
s = u'awëerwq\u0645\u0631\u062d\u0628\u0627\u043c\u0438\u0440bròn 1990 23x4 + &23 \'we\' we\'s mexicqué'
s
"awëerwq مرحباмир bròn 1990 23x4 + &23 'we' we's mexicqué"
我找不到一种方法来删除不可打印的东西,如“محبми”,但保留拉丁字符“óé…”。在我的例子中,数字(比如“1990”)是不可取的。我使用了来自re
的ASCII
标志,但我不知道这有什么问题,因为它删除了“óé,…”。使用string.printable
也是同样的问题。
我不知道为什么
鉴于ASCII表,它被指定为137。我预期的结果是这样的:
x = some_method(s)
"awëerwq bròn 23x4 we we s mexicqué"
那么,我希望代码不依赖于不固定的编码。在
下面是一种可能有帮助的方法(Python 3.4):
这将获取字符串中字符的unicode名称,并匹配名称以拉丁语、数字或空格开头的字符。在
例如,这将匹配:
^{pr2}$这不会:
我有理由肯定拉丁字符都有以“拉丁语”开头的unicode名称,所以这应该可以过滤掉其他书写脚本,同时保留数字和空格。标点符号没有一个方便的单行线,所以在这个例子中,感叹号等也被过滤掉了。在
您大概可以通过使用} 进行筛选。然而,“字母”类别包含了很多脚本的字母,所以你最终还是会得到一些这样的字母:“م”。在
ord(c) < 0x250
这样的代码点进行过滤,尽管您可能会得到一些您意想不到的结果。或者,您可以尝试按^{我认为你的问题问错了。ASCII中没有字符
óëé
。请看一下这里的所有ASCII字符集,看看它有多基本:https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart
您使用的字符串似乎是Unicode格式的,因为它可以同时支持“محباми”和“ëé”。在
在这种情况下,可以使用
http://jrgraphix.net/research/unicode_blocks.php
并且只包括拉丁语(这将过滤掉阿拉伯语字符)。在
下面是一个例子:
相关问题 更多 >
编程相关推荐