如何判断字符仅为英文字母,解决isalpha()识别非英文字母返回True的问题
问题原因
Python内置的str.isalpha()方法基于Unicode字符属性做判断,所有语言的字母类字符(包括希伯来语、希腊语、中文汉字等)都会返回True,因此无法用来筛选仅包含英文字母的字符串。
方法1:正则表达式匹配(推荐)
使用正则规则匹配全量大小写英文字母,是可读性最高的实现方案:
import re def is_english_only(s: str) -> bool: # 匹配全小写/大写英文字母,至少包含1个字符 return bool(re.fullmatch(r'^[a-zA-Z]+$', s))
- 如果允许空字符串输入,将正则中的
+替换为*即可 - 测试效果:
is_english_only("HelloWorld")返回Trueis_english_only("שלום")返回Falseis_english_only("Hello123")返回False
方法2:字符范围判断(无需引入正则模块)
直接判断每个字符是否落在大小写英文字母的ASCII范围内,适合不想引入额外依赖的场景:
def is_english_only(s: str) -> bool: # 若要禁止空字符串,可添加 if not s: return False 逻辑 return all('a' <= c <= 'z' or 'A' <= c <= 'Z' for c in s)
内容的提问来源于stack exchange,提问作者Funnycallsw
相关产品推荐
相关产品推荐

