繁体   English   中英

如何从Python中的特定索引对字符串Python进行子字符串化?

[英]How to substring a string Python from a specific index in Python?

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

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

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

>>> 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.分区性能

在这种情况下:

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

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

要么:

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

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

使用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'

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

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

因此,如果您得到一个像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

如果您确定字符在字符串中,则我最常使用的字符如下所示:

mystring=mystring[mystring.find('*'):]

这将从您的字符开始对字符串进行切片,而无需创建其他数据结构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM