用“(”和“)”拆分字符串并保留分隔符(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)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,如何拆分字符串并保留分隔符?

Java Regex在分隔符和保留分隔符之间拆分字符串[重复]

java - 如何拆分字符串,同时保留分隔符?

如何拆分字符串但在开头保留分隔符[重复]

如何拆分字符串但在java中保留分隔符? [复制]

Python:按分隔符列表拆分字符串