Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查字符串是否以XXXX开头_Python_String_String Comparison - Fatal编程技术网

Python 检查字符串是否以XXXX开头

Python 检查字符串是否以XXXX开头,python,string,string-comparison,Python,String,String Comparison,我想知道如何在Python中检查字符串是否以“hello”开头 在Bash中,我通常会: if [[ "$string" =~ ^hello ]]; then do something here fi 如何在Python中实现同样的功能 aString = "hello world" aString.startswith("hello") 有关的详细信息。请参阅您的具体问题 然而,更一般地说,你在做什么 if [[ "$string" =~ ^hello ]] 是正则表达式匹配。要在Py

我想知道如何在Python中检查字符串是否以“hello”开头

在Bash中,我通常会:

if [[ "$string" =~ ^hello ]]; then
 do something here
fi
如何在Python中实现同样的功能

aString = "hello world"
aString.startswith("hello")
有关的详细信息。

请参阅您的具体问题

然而,更一般地说,你在做什么

if [[ "$string" =~ ^hello ]]
是正则表达式匹配。要在Python中执行相同的操作,请执行以下操作:

import re
if re.match(r'^hello', somestring):
    # do stuff

显然,在这种情况下,
somestring.startswith('hello')
更好。

也可以这样做

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")
如果要将多个单词与魔法单词匹配,可以将要匹配的单词作为元组传递:

>>> magicWord = 'zzzTest'
>>> magicWord.startswith(('zzz', 'yyy', 'rrr'))
True

获取一个字符串或字符串的元组。

我做了一个小实验,看看是哪种方法

  • string.startswith('hello')
  • string.rfind('hello')==0
  • string.rpartition('hello')[0]=''
  • string.rindex('hello')==0
返回某个字符串是否以另一个字符串开头最有效

下面是我所做的许多测试运行中的一个测试运行的结果,其中每个列表都被排序,以显示在我使用的循环的每次迭代期间解析500万个以上表达式所花费的最短时间(以秒为单位):

['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.rindex('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())])

只是想补充一点,对于我正在做的事情,re.match和re.sub总是比任何其他方法都慢得多。