假设我有这个字符串'foo1bar2xyz'
我知道其中数字的索引{'1': 3, '2': 7}
我想形成没有数字的父字符串的子字符串。如何获取删除特定索引的字符串的子字符串?
在上述情况中哪个是['foo', 'bar', 'xyz']
到目前为止已尝试过这个
def iterate_string(og_string, start, stop):
if start == 0:
return og_string[:stop]
else:
return og_string[start+1:stop]
def ret_string(S):
digit_dict = {c:i for i,c in enumerate(S) if c.isdigit()}
digit_positions = list(digit_dict.values())
# return digit_positions
substrings = []
start_index = 0
for position in digit_positions:
p = iterate_string(S, start_index, position)
substrings.append(p)
start_index = position
return substrings
print ret_string('foo1bar2xyz')
但这会返回['foo', 'bar']
答案 0 :(得分:4)
您可以使用RE
来完成import re
h = "foo1bar2xyz"
l = re.compile("\d").split(h)
输出:
['foo', 'bar', 'xyz']
答案 1 :(得分:2)
试试这个:
l = re.compile("[0-9]").split(s)
答案 2 :(得分:2)
如果您有索引并希望用作输入,那么这也是一个好主意:
def split_by_indices(s, indices):
ends = sorted(indices.values()) # we only need the positions
ends.append(len(s))
substrings = []
start = 0
for end in ends:
substrings.append(s[start:end])
start = end + 1
return substrings
演示:
>>> split_by_indices('foo1bar2xyz', {'1': 3, '2': 7})
['foo', 'bar', 'xyz']
此忽略输入字符串中的所有实际数值,并使用字典中的[3, 7]
个位置。
但是,如果您当前正在构建{'1': 3, '2': 7}
地图以分割字符串,则可能更容易使用正则表达式:
import re
split_by_digits = re.compile(r'\d').split
result = split_by_digits(inputstring)