擅长:python、mysql、java
<p>下面是一种可能有帮助的方法(Python 3.4):</p>
<pre><code>import unicodedata
def remove_nonlatin(s):
s = (ch for ch in s
if unicodedata.name(ch).startswith(('LATIN', 'DIGIT', 'SPACE')))
return ''.join(s)
>>> s = 'awëerwq\u0645\u0631\u062d\u0628\u0627\u043c\u0438\u0440bròn 1990 23x4 + &23 \'we\' we\'s mexicqué'
>>> remove_nonlatin(s)
'awëerwqbròn 1990 23x4 23 we wes mexicqué'
</code></pre>
<p>这将获取字符串中字符的unicode名称,并匹配名称以拉丁语、数字或空格开头的字符。在</p>
<p>例如,这将匹配:</p>
^{pr2}$
<p>这不会:</p>
<pre><code>>>> unicodedata.name('م')
'ARABIC LETTER MEEM'
</code></pre>
<p>我有理由肯定拉丁字符都有以“拉丁语”开头的unicode名称,所以这应该可以过滤掉其他书写脚本,同时保留数字和空格。标点符号没有一个方便的单行线,所以在这个例子中,感叹号等也被过滤掉了。在</p>
<p>您大概可以通过使用<code>ord(c) < 0x250</code>这样的代码点进行过滤,尽管您可能会得到一些您意想不到的结果。或者,您可以尝试按<a href="http://www.unicode.org/reports/tr44/#General_Category_Values" rel="nofollow">^{<cd2>}</a>进行筛选。然而,“字母”类别包含了很多脚本的字母,所以你最终还是会得到一些这样的字母:“م”。在</p>