如何检查字符串是否包含西里尔字符?
E.g。
import random
def rand_walk():
walk = 0
for i in range(9):
rand = random.randint(0,1)
if(rand == 0):
walk = walk + 1
else:
walk = walk - 1
return walk
absolute = 0.0
numtrial = 100
for j in range(numtrial):
walk = rand_walk()
absolute = absolute + (walk**2)**(1/2.0)
print "Average Absolute Distance ", absolute/numtrial
答案 0 :(得分:8)
您可以使用正则表达式检查字符串是否包含>>> has_cyrillic('Hello, world!')
False
>>> has_cyrillic('Привет, world!')
True
范围内的字符:
а-я, А-Я
或者,您可以匹配whole Cyrillic script range:
import re
def has_cyrillic(text):
return bool(re.search('[а-яА-Я]', text))
这也将匹配扩展的西里尔字母(例如ё,Є,ў)的字母。
答案 1 :(得分:4)
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='ё'>
答案 2 :(得分:0)
建议一种方法,比此处讨论的方法要快。
方法#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在先前的帖子中进行了讨论
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)
答案 3 :(得分:-2)
你可以创建一个包含西里尔字母的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