Python 中不区分大小写的字符串 :startswith()

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()不区分大小写的方式使用该方法:

  1. 使用str.lower()将两个字符串都转换为小写。
  2. 使用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,最后一个字符的索引为-1or 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()就足够了。

发表评论