我学习python已有几个月了,我有一个问题。
示例我有一个字符串s='string_123'
,我需要从s中获取"123"
。
据我所知,python提供了一些方法:
这个问题看起来可能与:Python: Extract numbers from a string
但是,它主要将split()与正则表达式进行比较。我需要了解每种方法的详细信息。
s.split("_")[-1]
s.partition("_")[2]
s[7:]
那么哪种方法最好呢?还是我们有比其他更好的方法?
答案 0 :(得分:2)
split
和partition
之间的区别在于,partition
仅在给定分隔符的第一次出现时分裂,并且也返回该分隔符本身。
split
将返回一个字符串数组,该字符串根据给定分隔符的位置分隔该字符串,并且不将该分隔符包括在数组中。
采用字符串"a+b+c+d"
。
"a+b+c+d".split("+") # (= ["a", "b", "c", "d"])
"a+b+c+d".partition("+") # (= ("a", "+", "b+c+d"))
仅当您知道下划线恰好位于位置6时,才可以使用s[7:]
。这也将在下划线之后返回所有内容,因此,假设我们要基于“ +”分割前面的字符串符号,知道加号在位置1上,我们将使用数组符号:
"a+b+c+d"[2:] # (= "b+c+d")
您可以将其与find
结合使用:
i = "a+b+c+d".find("+")
"a+b+c+d"[i+1:] # ( = "b+c+d")
答案 1 :(得分:0)
您也可以这样做:
>>> import re
>>> re.findall(r'\d+', s)[0]
'123'
这使用正则表达式来识别字符串中的数字,并将其拆分为列表。 [0]
选择出现在字符串中的数字的第一个实例。
答案 2 :(得分:0)
从任何方面来说,您都需要告诉它最好的信息,例如速度,内存使用量和复杂性。因此,这取决于您的需求。 例如,最简单的方法是使用:
s='string_123'
end = None
print(s[7:end])
如果您不知道_
在哪里,请使用此
s='string_123'
index=0
for i in s:
index=index+1
if i=='_':
break;
end = None
print(s[index:end])
用于分割字符串
print(s.split('_'))