使用正则表达式或循环在 Python 中进行条件字符串拆分
Conditional string splitting in Python using regex or loops
我有一个字符串 c
,它具有相应的重复模式:
- 从
0
到 10
的整数,
- 字符
S
、D
或T
、
- 特殊字符
*
或#
(可选)
例如,c
可能看起来像 1D2S#10S
,或 1D#2S*3S
,等等。
我要用 c
进行进一步的计算,但为了做到这一点,我认为将 c
拆分为包含整数、字符和可能的特殊字符的子字符串会有所帮助。因此,例如,1D2S#10S
将拆分为 1D
、2S#
、10S
。 1D#2S*3S
将拆分为 1D#
、2S*
、3S
。
我知道这样的字符串拆分可以用 re.split()
简洁地完成,但由于这是有条件的,我无法找到拆分它的最佳方法。相反,我尝试使用 for
循环:
clist = []
n = 0
for i in range(len(c)):
if type(c[i]) != 'int':
if type(c[i+1]) == 'int':
clist.append(c[n:i+1])
n = i
else:
clist.append(c[n:i+2])
n = i
这引发了一个索引问题,但尽管如此我可以说它不是最佳的。有没有办法使用 re
相应地拆分它?
使用re.findall()
:
>>> re.findall(r'\d*[SDT][\*#]?', '1D2S#10S')
['1D', '2S#', '10S']
>>> re.findall(r'\d*[SDT][\*#]?', '1D#2S*3S')
['1D#', '2S*', '3S']
我有一个字符串 c
,它具有相应的重复模式:
- 从
0
到10
的整数, - 字符
S
、D
或T
、 - 特殊字符
*
或#
(可选)
例如,c
可能看起来像 1D2S#10S
,或 1D#2S*3S
,等等。
我要用 c
进行进一步的计算,但为了做到这一点,我认为将 c
拆分为包含整数、字符和可能的特殊字符的子字符串会有所帮助。因此,例如,1D2S#10S
将拆分为 1D
、2S#
、10S
。 1D#2S*3S
将拆分为 1D#
、2S*
、3S
。
我知道这样的字符串拆分可以用 re.split()
简洁地完成,但由于这是有条件的,我无法找到拆分它的最佳方法。相反,我尝试使用 for
循环:
clist = []
n = 0
for i in range(len(c)):
if type(c[i]) != 'int':
if type(c[i+1]) == 'int':
clist.append(c[n:i+1])
n = i
else:
clist.append(c[n:i+2])
n = i
这引发了一个索引问题,但尽管如此我可以说它不是最佳的。有没有办法使用 re
相应地拆分它?
使用re.findall()
:
>>> re.findall(r'\d*[SDT][\*#]?', '1D2S#10S')
['1D', '2S#', '10S']
>>> re.findall(r'\d*[SDT][\*#]?', '1D#2S*3S')
['1D#', '2S*', '3S']