python - 按字符拆分字符串

python - splitting string by characters

我有一个看起来像这样的字符串:

my_str = '15(1)(635)(634)(582)(583)'

如何从字符串中获取值数组?

[15,1,635,634,582,583]

删除“)”,然后拆分为“(”:

[int(x) for x in my_str.replace(")", "").split("(")]

此列表推导式还将字符串转换为整数。

这可以用一个简单的正则表达式轻松解决:\d+

import re

my_str = '15(1)(635)(634)(582)(583)'
print([int(i.group()) for i in re.finditer(r'\d+', my_str)])

输出:

[15, 1, 635, 634, 582, 583]

给定这个特定的输入,简化问题的一种方法是只获取连续的数字串,例如使用 itertools.groupby:

>>> my_str = '15(1)(635)(634)(582)(583)'
>>> from itertools import groupby
>>> [int(''.join(group)) for dec, group in groupby(my_str, str.isdecimal) if dec]
[15, 1, 635, 634, 582, 583]

您可以使用 re 模块:

import re
my_str = '15(1)(635)(634)(582)(583)'
my_str = re.findall(r"[\w']+", my_str)

for i in range(len(my_str)):
  my_str[i] = int(my_str[i])

print(my_str)

这将首先将列表拆分为由特殊字符分隔的字符串,然后将它们转换为整数。

或者,您可以使用常规 .split() 函数按 "(" 拆分,然后删除带有子字符串的最终 ")"

my_str = '15(1)(635)(634)(582)(583)'
my_str = my_str.split("(")
for i in range(len(my_str) - 1):
  my_str[i + 1] = int(my_str[i + 1][:-1])

my_str[0] = int(my_str[0])
print(my_str)

两者的输出:

[15, 1, 635, 634, 582, 583]

希望对您有所帮助!如果您有任何其他问题或需要澄清,请告诉我:)

这类似于this one。首选的解决方案是将两个定界符之一的所有实例替换为另一个,例如by new_str = my_str.replace(')', '('),它给你一个字符串,你只有一种括号作为分隔符。然后在那个带有分隔符的 .split() 上,你会得到一个列表,你可以很容易地将它转换成一个数组。如果您希望单个值作为整数而不是字符串,您还需要转换它们。

my_str = '15(1)(635)(634)(582)(583)'
new_str = my_str.replace("(", " ")
new_str = new_str.replace(")", " ")
my_arr = new_str.split()
my_arr = [int(num)for num in my_arr]
print(my_arr)

可能有更短的方法。这是一个:

my_str = '15(1)(635)(634)(582)(583)'
my_str = my_str.replace(')(', ' ')
my_str = my_str.replace('(', ' ')
my_str = my_str.replace(')', ' ')
my_int_list = my_str.split()

你的 str 看起来像这样:

my_str = '15(1)(635)(634)(582)(583)'

所以用 space

替换 ')'
mystr = mystr.replace(')'," ")

也用 space

替换 '('
mystr = mystr.replace(')'," ")

终于:

my_str = "15(1)(635)(634)(582)(583)"
mystr = my_str.replace(")", " ")
mystr = mystr.replace("(", " ")
mystr = [int(x) for x in mystr.split(" ") if x]
mystr