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

Python 将字符串拆分为文本和数字?,python,string,list,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_stri

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

相关的

试试这个:

l = re.compile("[0-9]").split(s)

你可以用RE来做

import re
h = "foo1bar2xyz"
l = re.compile("\d").split(h)
输出:

['foo', 'bar', 'xyz']

如果您有索引并希望用作输入,那么这也是一个好主意:

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
演示:

这将忽略输入字符串中的任何实际数值,并仅使用字典中的
[3,7]
位置

但是,如果您当前正在构建
{1':3,'2':7}
映射来拆分字符串,那么使用正则表达式可能更容易:

import re

split_by_digits = re.compile(r'\d').split
result = split_by_digits(inputstring)

代码中可能存在的重复,除非最后一个字符是数字,否则将无法获得所需的输出。如果开始索引是最后一个索引,则必须在for循环之后进行检查。如果没有,则附加
S[开始索引+1:
。但是,您可能需要考虑在回答中描述的方法:最后一个字符是一个数字,第一个方法将在output@kuro:另一种方法也是如此。这取决于您的用例,这是否可取。
import re

split_by_digits = re.compile(r'\d').split
result = split_by_digits(inputstring)