![](/img/trans.png)
[英]How to check if a string contains a specific character or not in python
[英]Python: How to check if a unicode string contains a cased character?
我正在做一个过滤器,其中我检查unicode(utf-8编码)字符串是否不包含大写字符(在所有语言中)。 如果字符串根本不包含任何套接字符,那对我来说没问题。
例如:'你好!' 不会通过过滤器,但“!” 应该通过过滤器,因为“!” 不是一个套装的角色。
我打算使用islower()方法,但在上面的例子中,“!”。islower()将返回False。
根据Python Docs,“如果unicode字符串的套接字符全部为小写且字符串包含至少一个套接字符,则python unicode方法islower()返回True,否则返回False。”
由于当字符串不包含任何套接字符时,该方法也返回False,即。 “!”,我想检查字符串是否包含任何套接字符。
像这样......
string = unicode("!@#$%^", 'utf-8')
#check first if it contains cased characters
if not contains_cased(string):
return True
return string.islower():
有关contains_cased()函数的任何建议吗?
或者可能采用不同的实施方法?
谢谢!
import unicodedata as ud
def contains_cased(u):
return any(ud.category(c)[0] == 'L' for c in u)
以下是Unicode字符类别的完整独家新闻。
信件类别包括:
Ll -- lowercase
Lu -- uppercase
Lt -- titlecase
Lm -- modifier
Lo -- other
注意, Ll <-> islower()
; Lu
; (Lu or Lt) <-> istitle()
您可能希望阅读关于套管的复杂讨论,其中包括对Lm
字母的一些讨论。
盲目地将所有“信件”视为套管是明显错误的。 Lo
类别包括BMP中的45301个代码点(使用Python 2.6计算)。 其中很大一部分是Hangul Syllables,CJK表意文字和其他东亚人物 - 很难理解他们如何被视为“套装”。
您可能希望根据您期望的“套管字符”的(未指定的)行为来考虑替代定义。 这是一个简单的第一次尝试:
>>> cased = lambda c: c.upper() != c or c.lower() != c
>>> sum(cased(unichr(i)) for i in xrange(65536))
1970
>>>
有趣的是,有1216 x Ll和937 x Lu,总共2153 ...进一步研究Ll和Lu的真正意义。
使用模块unicodedata
,
unicodedata.category(character)
对于小写字母返回“ Ll
”,对于大写字母返回“ Lu
”。
在这里,您可以找到unicode字符类别列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.