在 Python 中使用正则表达式检查字符串是否以子字符串结尾

目录

Check if string ends with a substring using Regex in Python

  1. 在 Python 中使用正则表达式检查字符串是否以子字符串结尾
  2. 检查字符串是否以 Python 中的数字结尾
  3. 在 Python 中对多个字符串使用 endswith()

在 Python 中使用正则表达式检查字符串是否以子字符串结尾

使用该re.search()方法使用正则表达式检查字符串是否以子字符串结尾,例如re.search(r'\d$', string).

美元符号$仅用于匹配字符串末尾的正则表达式。

主程序
import re string = 'bobbyhadz.com' match = re.search(r'\.com$', string) print(match) # 👉️ <re.Match object; span=(9, 13), match='.com'> if match is not None: print('The string ends with the regex') print(match.group()) # 👉️ .com print(match.start()) # 👉️ 9 else: print('The string does NOT end with the regex')

如果您需要检查字符串是否以忽略大小写的子字符串结尾,请使用该re.IGNORECASE标志。

主程序
import re string = 'BOBBYHADZ.COM' match = re.search(r'\.com$', string, flags=re.IGNORECASE) print(match) # 👉️ <re.Match object; span=(9, 13), match='.COM'>

第一个示例使用该re.search()方法使用正则表达式检查字符串是否以子字符串结尾。

re.search方法查找字符串中提供的正则表达式产生匹配项的第一个位置

主程序
import re # 👇️ <re.Match object; span=(5, 6), match='3'> print(re.search(r'\d$', 'abc123')) # 👇️ None print(re.search(r'\d$', '123abc'))
如果该re.search()方法找到匹配项,它将返回一个对象,否则返回。 matchNone

我们传递给该方法的第一个参数re.search()是一个正则表达式。

美元符号$匹配字符串的末尾,因此该方法仅在末尾查找匹配项。 re.search()

如果您需要获取字符串中的匹配项和匹配项的索引,请使用 and
match.group()方法match.start()

主程序
import re string = 'bobbyhadz.com' match = re.search(r'\.com$', string) if match is not None: print('The string ends with the regex') print(match.group()) # 👉️ .com print(match.start()) # 👉️ 9 else: print('The string does NOT end with the regex')

如果您在阅读或编写正则表达式时需要帮助,请参阅

官方文档中的
正则表达式语法副标题。

该页面包含所有特殊字符的列表以及许多有用的示例。

使用 endswith() 检查字符串是否以子字符串结尾

您还可以使用该str.endswith()方法来检查字符串是否以子字符串结尾。该方法可以传递一个字符串或一个字符串元组。

主程序
string = 'bobbyhadz.com' print(string.endswith('.com')) # 👉️ True # 👇️ True print(string.endswith(('.abc', '.xyz', '.com')))

如果字符串以提供的后缀结尾,则 str.endswith 方法返回,否则
方法
返回TrueFalse

如果将元组传递给该endswith()方法,它会检查字符串是否以元组中的任何字符串结尾。

但是,该str.endswith()方法不支持正则表达式。

在 Python 中检查字符串是否以数字结尾

re.search()如果您需要检查字符串是否以数字结尾,请使用该方法。

主程序
import re string = 'bobby246' match = re.search(r'\d+$', string) if match is not None: print('The string ends with a number') print(match.group()) # 👉️ '246' print(int(match.group())) # 👉️ 246 print(match.start()) # 👉️ 5 else: print('The string does NOT end with a number')
如果您正在寻找非正则表达式解决方案,请向下滚动到下一个副标题。

re.search方法查找字符串中提供的正则表达式产生匹配项的第一个位置

主程序
import re string = 'bobby246' match = re.search(r'\d+$', string) # 👇️ <re.Match object; span=(5, 8), match='246'> print(match) # 👇️ None print(re.search(r'\d+$', 'abc'))
如果该re.search()方法找到匹配项,它将返回一个对象,否则返回。 matchNone

我们传递给该方法的第一个参数re.search()是一个正则表达式。

\d字符匹配数字[0-9](以及许多其他数字字符)。

加号+使正则表达式匹配前面字符(数字)的 1 次或多次重复。

美元符号$匹配字符串的末尾。

就其整体而言,正则表达式匹配字符串末尾的一位或多位数字。

match.group()如果需要获取字符串末尾的数字,可以使用该方法。

主程序
import re string = 'bobby246' match = re.search(r'\d+$', string) if match is not None: print('The string ends with a number') print(match.group()) # 👉️ '246' print(int(match.group())) # 👉️ 246 print(match.start()) # 👉️ 5 else: print('The string does NOT end with a number')

match.group()方法将匹配的数字作为字符串返回。如果需要将字符串转换为整数,可以使用int()类。

确保if在调用方法之前使用语句。如果字符串不以数字结尾,方法将返回。 match.group()re.search()None

match.start()方法返回匹配的第一个数字的索引。

使用 str.isdigit() 检查字符串是否以数字结尾

这是一个三步过程:

  1. 访问索引处的字符串-1以获取最后一个字符。
  2. 调用str.isdigit()角色的方法。
  3. 如果该方法返回True,则字符串以数字结尾。
主程序
string = 'bobby246' if string and string[-1].isdigit(): # 👇️ this runs print('The string ends with a number') else: print('The string does NOT end with a number')

Python 索引是从零开始的,因此字符串中的第一个字符的索引为0,最后一个字符的索引为-1or len(my_str) - 1

主程序
string = 'bobby246' print(string[-1]) # 👉️ 6
负索引可用于向后计数,例如string[-1] 返回字符串中的最后一个字符并string[-2]返回倒数第二个字符。

我们得到了字符串的最后一个字符,并使用该str.isdigit()方法检查它是否是数字。

str.isdigit方法返回
如果字符串中的所有字符都是数字并且至少有 1 个字符,否则
返回TrueFalse

主程序
print('A'.isdigit()) # 👉️ False print('5'.isdigit()) # 👉️ True

我们还使用布尔and运算符来确保字符串不为空。

主程序
string = 'bobby246' if string and string[-1].isdigit(): # 👇️ this runs print('The string ends with a number') else: print('The string does NOT end with a number')

and如果字符串为空,则不计算布尔运算符右侧的部分。

这很重要,因为访问索引处的空字符串会引发异常
IndexError

在 Python 中对多个字符串使用 endswith()

您可以将元组传递给该endswith()方法以将其与多个字符串一起使用。

该方法可以传递一个后缀元组,True如果字符串以元组中的任何后缀结尾则返回。

主程序
my_str = 'bobbyhadz.com' if my_str.endswith(('com', 'org', 'net')): # 👇️ this runs print('The string ends with one of the suffixes') else: print('The string does NOT end with any of the suffixes') print(my_str.endswith(('com', 'org', 'net'))) # 👉️ True print(my_str.endswith(('a', 'b', 'c'))) # 👉️ False

如果字符串以提供的后缀结尾,则 str.endswith 方法返回,否则
方法
返回TrueFalse

主程序
my_str = 'bobbyhadz.com' print(my_str.endswith('com')) # 👉️ True print(my_str.endswith('abc')) # 👉️ False

str.endswith()方法也可以传递一个后缀元组,
True如果字符串以任何后缀结尾则返回。

主程序
my_str = 'bobbyhadz.com' print(my_str.endswith(('com', 'org', 'net'))) # 👉️ True print(my_str.endswith(('a', 'b', 'c'))) # 👉️ False

将两组括号放在一起可能会有点难以阅读,因此您可以将元组提取到一个变量中。

主程序
my_str = 'bobbyhadz.com' suffixes = ('com', 'org', 'net') if my_str.endswith(suffixes): # 👇️ this runs print('The string ends with one of the suffixes') else: print('The string does NOT end with any of the suffixes') print(my_str.endswith(suffixes)) # 👉️ True

如果字符串以任何后缀结尾,则该str.endswith()方法返回
True,否则False返回 。

将 any() 与生成器表达式一起使用

另一种更冗长的方法是使用any()带有生成器表达式的函数。

主程序
my_str = 'bobbyhadz.com' suffixes = ('com', 'org', 'net') if any(my_str.endswith(suffix) for suffix in suffixes): # 👇️ this runs print('The string ends with one of the suffixes') else: print('The string does NOT end with any of the suffixes')

我们在对 的调用中使用了生成器表达式any()

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们调用str.endswith()具有当前后缀的方法并返回结果。

any函数接受一个可迭代对象作为参数,如果可迭代对象中的任何元素为真则返回。True

如果可迭代对象为空或可迭代对象中的所有元素都不为真,则
any函数返回False

如果条件至少满足一次,则any()函数短路并返回True

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: