Python — 检查字符串是否包含西里尔字符

Python — check if a string contains Cyrillic characters

如何判断一个字符串是否包含西里尔字符?

例如

>>> has_cyrillic('Hello, world!')
False
>>> has_cyrillic('Привет, world!')
True

您可以使用正则表达式检查字符串是否包含 а-я, А-Я 范围内的字符:

import re 

def has_cyrillic(text):
    return bool(re.search('[а-яА-Я]', text))

或者,您可以匹配 whole Cyrillic script range:

def has_cyrillic(text):
    return bool(re.search('[\u0400-\u04FF]', text))

这也将匹配扩展西里尔字母表的字母(例如 ё、Є、ў)。

您可以创建一个包含西里尔字母的 set,然后只检查字符串的每个字符:

cyrillic_letters = {....} # fill it with the cyrillic letters

def has_cyrillic(text):
    for c in text:
        if c in cyrillic_letters:
            return True
    return False

regex 支持 Unicode 属性以及一些短格式。

>>> regex.search(r'\p{IsCyrillic}', 'Hello, world!')
>>> regex.search(r'\p{IsCyrillic}', 'Привет, world!')
<regex.Match object; span=(0, 1), match='П'>
>>> regex.search(r'\p{IsCyrillic}', 'Hello, wёrld!')
<regex.Match object; span=(8, 9), match='ё'>

建议一种方法,比这里讨论的方法更快。

方法#1:

len("экономия3r4".encode("ascii", "ignore")) > len ("экономия3r4")

246 ns ± 7.76 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

如果有西里尔字符

,将打印 "True"

方法#2:

Max

之前在 post 中讨论过
import re

def has_cyrillic(text):
    return bool(re.search('[а-яА-Я]', text))

has_cyrillic("экономия3r4")

929 ns ± 20.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)