检查字符串是否以 XXXX 开头
- 2025-01-06 08:32:00
- admin 原创
- 128
问题描述:
我想知道如何在 Python 中检查字符串是否以“hello”开头。
在 Bash 中我通常会这样做:
if [[ "$string" =~ ^hello ]]; then
do something here
fi
我如何在 Python 中实现同样的效果?
解决方案 1:
aString = "hello world"
aString.startswith("hello")
关于 的更多信息startswith
。
解决方案 2:
RanRag 已经回答了您的具体问题。
然而,更一般地说,你正在做的事情
if [[ "$string" =~ ^hello ]]
是正则表达式匹配。要在 Python 中执行相同操作,您需要执行以下操作:
import re
if re.match(r'^hello', somestring):
# do stuff
显然,在这种情况下,somestring.startswith('hello')
是更好的。
解决方案 3:
如果你想将多个单词与你的魔法词匹配,你可以将要匹配的单词作为元组传递:
>>> magicWord = 'zzzTest'
>>> magicWord.startswith(('zzz', 'yyy', 'rrr'))
True
startswith
接受一个字符串或者一个字符串元组。
解决方案 4:
也可以这样做..
regex=re.compile('^hello')
## THIS WAY YOU CAN CHECK FOR MULTIPLE STRINGS
## LIKE
## regex=re.compile('^hello|^john|^world')
if re.match(regex, somestring):
print("Yes")
解决方案 5:
我做了一个小实验来看看这些方法中的哪一种
string.startswith('hello')
string.rfind('hello') == 0
string.rpartition('hello')[0] == ''
string.rindex('hello') == 0
最有效地返回某个字符串是否以另一个字符串开头。
这是我进行过的许多测试运行之一的结果,其中每个列表都按顺序排列,以显示在我使用的循环的每次迭代中解析上述 500 万个表达式所花费的最短时间(以秒为单位) :while
['startswith: 1.37', 'rpartition: 1.38', 'rfind: 1.62', 'rindex: 1.62']
['startswith: 1.28', 'rpartition: 1.44', 'rindex: 1.67', 'rfind: 1.68']
['startswith: 1.29', 'rpartition: 1.42', 'rindex: 1.63', 'rfind: 1.64']
['startswith: 1.28', 'rpartition: 1.43', 'rindex: 1.61', 'rfind: 1.62']
['rpartition: 1.48', 'startswith: 1.48', 'rfind: 1.62', 'rindex: 1.67']
['startswith: 1.34', 'rpartition: 1.43', 'rfind: 1.64', 'rindex: 1.64']
['startswith: 1.36', 'rpartition: 1.44', 'rindex: 1.61', 'rfind: 1.63']
['startswith: 1.29', 'rpartition: 1.37', 'rindex: 1.64', 'rfind: 1.67']
['startswith: 1.34', 'rpartition: 1.44', 'rfind: 1.66', 'rindex: 1.68']
['startswith: 1.44', 'rpartition: 1.41', 'rindex: 1.61', 'rfind: 2.24']
['startswith: 1.34', 'rpartition: 1.45', 'rindex: 1.62', 'rfind: 1.67']
['startswith: 1.34', 'rpartition: 1.38', 'rindex: 1.67', 'rfind: 1.74']
['rpartition: 1.37', 'startswith: 1.38', 'rfind: 1.61', 'rindex: 1.64']
['startswith: 1.32', 'rpartition: 1.39', 'rfind: 1.64', 'rindex: 1.61']
['rpartition: 1.35', 'startswith: 1.36', 'rfind: 1.63', 'rindex: 1.67']
['startswith: 1.29', 'rpartition: 1.36', 'rfind: 1.65', 'rindex: 1.84']
['startswith: 1.41', 'rpartition: 1.44', 'rfind: 1.63', 'rindex: 1.71']
['startswith: 1.34', 'rpartition: 1.46', 'rindex: 1.66', 'rfind: 1.74']
['startswith: 1.32', 'rpartition: 1.46', 'rfind: 1.64', 'rindex: 1.74']
['startswith: 1.38', 'rpartition: 1.48', 'rfind: 1.68', 'rindex: 1.68']
['startswith: 1.35', 'rpartition: 1.42', 'rfind: 1.63', 'rindex: 1.68']
['startswith: 1.32', 'rpartition: 1.46', 'rfind: 1.65', 'rindex: 1.75']
['startswith: 1.37', 'rpartition: 1.46', 'rfind: 1.74', 'rindex: 1.75']
['startswith: 1.31', 'rpartition: 1.48', 'rfind: 1.67', 'rindex: 1.74']
['startswith: 1.44', 'rpartition: 1.46', 'rindex: 1.69', 'rfind: 1.74']
['startswith: 1.44', 'rpartition: 1.42', 'rfind: 1.65', 'rindex: 1.65']
['startswith: 1.36', 'rpartition: 1.44', 'rfind: 1.64', 'rindex: 1.74']
['startswith: 1.34', 'rpartition: 1.46', 'rfind: 1.61', 'rindex: 1.74']
['startswith: 1.35', 'rpartition: 1.56', 'rfind: 1.68', 'rindex: 1.69']
['startswith: 1.32', 'rpartition: 1.48', 'rindex: 1.64', 'rfind: 1.65']
['startswith: 1.28', 'rpartition: 1.43', 'rfind: 1.59', 'rindex: 1.66']
我相信从一开始就很明显该startswith
方法是最有效的,因为返回字符串是否以指定字符串开头是其主要目的。
令我惊讶的是,这种看似不切实际的string.rpartition('hello')[0] == ''
方法总是会时不时地在方法之前被首先列出string.startswith('hello')
。结果表明,使用来确定一个字符串是否以另一个字符串开头比同时使用和str.partition
更有效。rfind
`rindex`
我注意到的另一件事是string.rfind('hello') == 0
和string.rindex('hello') == 0
正在进行一场激烈的战斗,他们各自从第四名上升到第三名,又从第三名下降到第四名,这是有道理的,因为他们的主要目的是相同的。
以下是代码:
from time import perf_counter
string = 'hello world'
places = dict()
while True:
start = perf_counter()
for _ in range(5000000):
string.startswith('hello')
end = perf_counter()
places['startswith'] = round(end - start, 2)
start = perf_counter()
for _ in range(5000000):
string.rfind('hello') == 0
end = perf_counter()
places['rfind'] = round(end - start, 2)
start = perf_counter()
for _ in range(5000000):
string.rpartition('hello')[0] == ''
end = perf_counter()
places['rpartition'] = round(end - start, 2)
start = perf_counter()
for _ in range(5000000):
string.rindex('hello') == 0
end = perf_counter()
places['rindex'] = round(end - start, 2)
print([f'{b}: {str(a).ljust(4, "4")}' for a, b in sorted(i[::-1] for i in places.items())])
解决方案 6:
字符串的行为类似于 Python 中的列表,因此您可以执行以下操作:
astring =“你好,世界”
astring [:5] =='你好'
扫码咨询,免费领取项目管理大礼包!