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

2024-06-25 05:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

相关SOquestions


Tags: 字符串stringindexreturnfoobarposition数字
3条回答

试试这个:

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

演示:

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

相关问题 更多 >