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

Max*_*ysh 8 python string

如何检查字符串是否包含西里尔字符?

例如

>>> has_cyrillic('Hello, world!')
False
>>> has_cyrillic('??????, world!')
True
Run Code Online (Sandbox Code Playgroud)

Max*_*ysh 12

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

import re 

def has_cyrillic(text):
    return bool(re.search('[?-??-?]', text))
Run Code Online (Sandbox Code Playgroud)

或者,您可以匹配整个西里尔语脚本范围:

def has_cyrillic(text):
    return bool(re.search('[\u0400-\u04FF]', text))
Run Code Online (Sandbox Code Playgroud)

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

  • 如果有人正在寻找 R 等效项 `grepl(pattern = '[\u0400-\u04FF]', x = text)` 就可以完成这项工作。 (2认同)

Ign*_*ams 9

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='?'>
Run Code Online (Sandbox Code Playgroud)


Sat*_*esh 5

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

\n\n

方法#1:

\n\n
len("\xd1\x8d\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd1\x8f3r4".encode("ascii", "ignore")) > len ("\xd1\x8d\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd1\x8f3r4")\n\n246 ns \xc2\xb1 7.76 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果有西里尔字符,将打印“True”

\n\n

方法#2:

\n\n

Max 在之前的帖子中讨论过

\n\n
import re\n\ndef has_cyrillic(text):\n    return bool(re.search(\'[\xd0\xb0-\xd1\x8f\xd0\x90-\xd0\xaf]\', text))\n\nhas_cyrillic("\xd1\x8d\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd1\x8f3r4")\n\n929 ns \xc2\xb1 20.6 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000000 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n