如何检查字符串是否包含西里尔字符?
例如
>>> 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)
这也将匹配扩展的西里尔字母(例如ё,Є,ў)的字母.
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)
建议一种方法,比这里讨论的方法更快。
\n\n方法#1:
\n\nlen("\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)\nRun Code Online (Sandbox Code Playgroud)\n\n如果有西里尔字符,将打印“True”
\n\n方法#2:
\n\nMax 在之前的帖子中讨论过
\n\nimport 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)\nRun Code Online (Sandbox Code Playgroud)\n