从特定字符开始在Python中对字符串进行子串的最佳方法是什么?
例如,如果val = "s2*20"
,如何获取val
之后*
的子字符串。结果应为res = 20
。
PS:我们假设所有字符串都包含*
,长度不同。但是,我们不知道*
的确切索引。
答案 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
答案 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
这将从该字符开始切割字符串,而不创建额外的数据结构