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)