将字符串拆分为文本和数字?

时间:2017-06-04 14:30:00

标签: python string list

假设我有这个字符串'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']

相关SO questions

3 个答案:

答案 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)