用“(”和“)”拆分字符串并保留分隔符(Python)[重复]
Posted
技术标签:
【中文标题】用“(”和“)”拆分字符串并保留分隔符(Python)[重复]【英文标题】:Split a string with "(" and ")" and keep the delimiters (Python) [duplicate] 【发布时间】:2018-04-10 15:17:51 【问题描述】:假设我有这个字符串:
s = "123(45)678"
我怎样才能得到这份清单?
l = ['123','(','45',')','678']
【问题讨论】:
@hek2mgl 不是真的,问题还在于保留分隔符 另一个问题是关于正则表达式拆分。这个是关于 string.split 的,而且更直接 这个问题要求相同的解决方案,一个捕获组将整个表达式包装在一个 re.split 中。重复标记应保留。 【参考方案1】:如果您只对'('
或')'
感兴趣,那么str.partition
就足够了。
由于您有多个分隔符并且您想保留它们,您可以将re.split
与捕获组一起使用:
import re
s = "123(45)678"
print(re.split(r'([()])', s))
# ['123', '(', '45', ')', '678']
【讨论】:
好吧,但是试试s.partition('(')
和s = "123(45(678"
。你得到的不是('123', '(', '45', '(', '678')
,而是('123', '(', '45(678')
。
@StefanPochmann 很公平,虽然这不是答案的关键:)
@DeepSpace 是的,我知道。我很惊讶你甚至把它包括在内:-)。而且我发现它可能会产生误导。
@StefanPochmann 抱歉,我没注意到你在评论中提到了s.partition
。
太好了,谢谢!我如何更改此正则表达式以考虑 '['
和 ']'
而不是 '('
和 ')'
?【参考方案2】:
你可以使用re.findall
:
import re
s = "123(45)678"
final_data = re.findall('\d+|\(|\)', s)
print(final_data)
输出:
['123', '(', '45', ')', '678']
【讨论】:
【参考方案3】:如果你不想使用re
,那么你可以试试这个:
s = "123(45)678"
finalist = []
tempstring = ''
for e in s:
if e!='(' and e!=')':
tempstring+=e
else:
finalist.append(tempstring)
finalist.append(e)
tempstring=''
finalist.append(tempstring)
print(finalist)
【讨论】:
他为什么要使用长 9 倍而且可能更慢的解决方案? @DeepSpace 因为regexphobia。 @Stefan Pochmann 现在应该可以了 是的,现在看起来正确。好吧,有一段时间我认为总是 做最后的append
是错误的,因为例如对于"123(45)"
,您的结果最后包含一个空字符串。但后来我意识到这也是 split 所做的。所以我猜@Ajax1234 的回答可能是错误的,因为它没有那样做。以上是关于用“(”和“)”拆分字符串并保留分隔符(Python)[重复]的主要内容,如果未能解决你的问题,请参考以下文章