如何从Python中的特定索引子串字符串Python?

时间:2017-05-17 08:04:11

标签: python string

从特定字符开始在Python中对字符串进行子串的最佳方法是什么?

例如,如果val = "s2*20",如何获取val之后*的子字符串。结果应为res = 20

PS:我们假设所有字符串都包含*,长度不同。但是,我们不知道*的确切索引。

6 个答案:

答案 0 :(得分:1)

>>> val = 's2*20'
>>> val.split('*')[1]
'20'

根据您的需要,您可能需要检查字符串中的'*',或者只是在第一次出现'*'之后检查所有内容,但如果没有更多信息则难以猜测。这可能是一个看似合理的场景:

>>> def rest(s):
...     return s.split('*',1) if '*' in s else s
...
>>> rest('hi')
'hi'
>>> rest('hi there * wazzup * man')
['hi there ', ' wazzup * man']

编辑正如@Jon评论中指出的那样(不,不是Skeet),使用partition在各方面都更好。

>>> val = 's2*20'
>>> val.partition('*')[2]
'20'
>>> val = 's2-20'
>>> val.partition('*')[2]
''

它更顺畅,并且表现出令人惊讶的好 - 实际上比split要好得多:

>>> import timeit
>>> timeit.timeit('"s2*20".split("*")')
0.22846507105495942
>>> timeit.timeit('"s2-20".split("*")')
0.1685205617091654
>>> timeit.timeit('"s2*20".partition("*")')
0.1475598294296372
>>> timeit.timeit('"s2-20".partition("*")')
0.09512975462482132

py split vs. partition performance

答案 1 :(得分:1)

在这个具体案例中:

val[val.index('*')+1:]

找到*的第一个出现位置,然后从那里取一个切片。

或:

val.split('*', 1)[-1]

如果你想要在第一个*之后的所有内容,告诉你只用分隔符拆分字符串一次。

答案 2 :(得分:0)

使用str.split

>>> val = "s2*20"
>>> res = val.split("*")[1]
>>> res
'20'

使用str.index

>>> val[val.index("*")+1:]
'20'

使用re.findall

>>> re.findall("\*(\d+)", val)[0]
'20'

答案 3 :(得分:0)

您可以使用str.index来获取星号的索引,然后使用索引来对整个字符串进行子串。

s = "s2*20"
ind = s.index('*')
substring = s[ind+1:]

答案 4 :(得分:0)

所以,如果你得到一个类似var =“s s s * s * 20”的字符串,你想要哪个*? 如果你在String中有一个*序列的准确索引,我认为这可能是这样的:

    string_test = "var num=s*s*t*15"
    # In case you want the substring after the last * 
    sub_string = string_test[string_test.rindex('*') + 1:] 
    print sub_string

答案 5 :(得分:0)

如果您确定该字符在字符串中,那么我最常使用的字符就是这样:

ALTER TABLE tbl ADD COLUMN col VARCHAR(20)  DEFAULT "MyDefault" NULL

这将从该字符开始切割字符串,而不创建额外的数据结构