Python 中不区分大小写的字符串: startswith()
Case-insensitive string startswith() in Python
使用re.match()
方法以str.startswith()
不区分大小写的方式使用该方法,例如if re.match(substring, string, re.IGNORECASE):
. 如果字符串以指定的子字符串开头,则该str.match()
方法将返回,忽略大小写。True
import re
string = 'bobbyhadz.com'
substring = 'BOBBY'
if re.match(substring, string, re.IGNORECASE):
# 👇️ this runs
print('The string starts with the substring (case-insensitive)')
else:
print('The string does NOT start with the substring (case-insensitive)')
# 👇️ True
print(
bool(re.match('AB', 'ABCD', re.IGNORECASE))
)
# 👇️ False
print(
bool(re.match('ZX', 'ABCD', re.IGNORECASE))
)
re
模块的解决方案,请向下滚动到下一个副标题。如果提供的正则表达式在字符串中匹配,则re.match方法返回一个对象。match
如果字符串与正则表达式模式不匹配,则该match()
方法返回。None
re.match
方法仅匹配字符串开头的正则表达式。bool()
如果您需要将调用结果转换为
re.match()
布尔值,则可以使用该类。
import re
# 👇️ True
print(
bool(re.match('AB', 'ABCD', re.IGNORECASE))
)
# 👇️ False
print(
bool(re.match('ZX', 'ABCD', re.IGNORECASE))
)
请注意,我们设置re.IGNORECASE
标志以在匹配字符串中的子字符串时忽略大小写。
或者,您可以使用该str.lower()
方法。
不区分大小写的字符串 startswith() using str.lower()
要以str.startswith()
不区分大小写的方式使用该方法:
- 使用
str.lower()
将两个字符串都转换为小写。 - 使用
str.startswith()
小写字符串的方法。
string = 'bobbyhadz.com'
substring = 'BOBBY'
if string.lower().startswith(substring.lower()):
# 👇️ this runs
print('The string starts with the substring (case-insensitive)')
else:
print('The string does NOT start with the substring (case-insensitive)')
# 👇️ True
print(
string.lower().startswith(substring.lower())
)
str.lower方法返回字符串
的副本,其中所有大小写字符都转换为小写。
在使用该方法之前,我们使用该str.lower()
方法将两个字符串都转换为小写str.startswith()
。
当两个字符串都转换为相同的大小写时,我们可以以
str.startswith()
不区分大小写的方式使用该方法。
如果您使用长字符串并需要优化性能,则只能将字符串的一部分转换为小写。
string = 'bobbyhadz.com'
substring = 'BOBBY'
if string[:len(substring)].lower() == substring.lower():
# 👇️ this runs
print('The string starts with the substring (case-insensitive)')
else:
print('The string does NOT start with the substring (case-insensitive)')
# 👇️ True
print(
string[:len(substring)].lower() == substring.lower()
)
我们只将等于子字符串长度的字符串片段转换为小写。
字符串切片的语法是my_str[start:stop:step]
.
start
,而stop
索引是排他的(最多,但不包括)。切片string[:len(substring)]
从索引开始0
并上升到但不包括指定的索引。
Python 索引是从零开始的,因此字符串中的第一个字符的索引为0
,最后一个字符的索引为-1
or len(my_str) - 1
。
字符串的最后一个索引始终等于len(string) - 1
,但我们使用了子字符串的长度,因为stop
索引是唯一的(最多,但不包括)。
string = 'bobbyhadz.com'
substring = 'BOBBY'
# 👇️ True
print(
string[:len(substring)].lower() == substring.lower()
)
仅当您必须使用非常长的字符串时才使用此方法,因为它不如使用str.startswith()
.
如果您的字符串包含非 ASCII 字母,请使用该str.casefold()
方法而不是str.lower()
.
string = 'bobbyhadz.com'
substring = 'BOBBY'
if string.casefold().startswith(substring.casefold()):
# 👇️ this runs
print('The string starts with the substring (case-insensitive)')
else:
print('The string does NOT start with the substring (case-insensitive)')
# 👇️ True
print(
string.casefold().startswith(substring.casefold())
)
str.casefold方法返回字符串的
casefolded 副本。
# 👇️ using str.casefold()
print('BOBBY'.casefold()) # 👉️ bobby
print('ß'.casefold()) # 👉️ ss
# 👇️ using str.lower()
print('BOBBY'.lower()) # 👉️ bobby
print('ß'.lower()) # 👉️ ß
Casefolding 类似于小写,但更激进,因为它旨在删除字符串中的所有大小写区别。
请注意德语小写字母如何ß
等于ss
。
str.lower()
方法按原样返回该字母,同时该str.casefold()
方法将其转换为ss
.str.casefold()
如果您只比较 ASCII 字符串,则无需使用该方法。在这种情况下,使用str.lower()
就足够了。