正则表达式以匹配所有非英语字母字符

时间:2020-10-13 22:56:44

标签: python regex ascii

我不是RegEx专家,但是我试图找到一种解决方案,如果存在任何非英语字符(即[^ A-Za-z],但仅像字母字符,不是数字或符号,则返回TRUE) )。

我已经尝试过了:

obj = re.search("[\x00-\x7F]", "ивн")
print(bool(obj))

返回False但

obj = re.search("[\x00-\x7F]", "ив.н")
print(bool(obj))

返回True,这不应该-我真的不在乎特殊字符或标点符号。只需一个快速的解决方案,看看文本是否使用另一种语言即可。

即,如果存在西里尔字母或Umlauts,则对于非英语脚本返回true等,否则返回false。 StackOverflow上的此处其他解决方案仅匹配非英语字符和符号或仅匹配非ASCII字符。我正在尝试扫描一段文字,看它是否基本上不是英语。我找不到其他可行的答案。

1 个答案:

答案 0 :(得分:0)

我能想到的东西完全可以满足您的要求,但是我不确定它是否可以满足您的预期目的。

Google Translate具有一个Web API,针对该API可以通过一种变通方法来use it for free。通过发送带有“自动”设置的查询,它将自动检测并以检测到的语言进行响应。您可以尝试使用文本的前几个句子来完成此操作。

我们可以完全按照您的意思做的一种快速而肮脏的方法是,仅查看检测到的字符的unicode值,如果它们超过某个数字,则将其丢弃。 (通过查看this website.选择数字)

def is_english(string):
    for char in string:
        if ord(char) >= 127: 
            return False
    else:
        return True

这有时可行:

>>> is_english("Hello")
True
>>> is_english("Российская")
False

但并非一直如此。

>>> is_english("I gave the nice man my résumé")
False
>>> is_english("Stavo andando in parco, il mio cane voleva cagare")
True
相关问题