目录
Check if string ends with a substring using Regex in Python
在 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()
方法找到匹配项,它将返回一个对象,否则返回。 match
None
我们传递给该方法的第一个参数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 方法返回,否则该
方法返回。True
False
如果将元组传递给该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()
方法找到匹配项,它将返回一个对象,否则返回。 match
None
我们传递给该方法的第一个参数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
以获取最后一个字符。 - 调用
str.isdigit()
角色的方法。 - 如果该方法返回
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
,最后一个字符的索引为-1
or len(my_str) - 1
。
string = 'bobby246' print(string[-1]) # 👉️ 6
string[-1]
返回字符串中的最后一个字符并string[-2]
返回倒数第二个字符。我们得到了字符串的最后一个字符,并使用该str.isdigit()
方法检查它是否是数字。
str.isdigit方法返回
如果字符串中的所有字符都是数字并且至少有 1 个字符,否则返回。True
False
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 方法返回,否则该
方法返回。True
False
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
。
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: