如何基于两个字符进行拆分" ["和"]"在一个字符串

时间:2018-05-18 01:43:37

标签: python python-3.x split

例如,在下面调用.split()会给...

x = "[Chorus: Rihanna & Swizz Beatz]
I just wanted you to know
...more lyrics
[Verse 2: Kanye West & Swizz Beatz]
I be Puerto Rican day parade floatin'
... more lyrics"

x.split()
print(x)

会给出

["I just wanted you to know ... more lyrics", " be Puerto Rican day parade floatin' ... more lyrics]

另外,如何将删除的部分保存在括号中,谢谢。在两件事物中拆分未知字符串很难:/

4 个答案:

答案 0 :(得分:2)

使用 re.split

>>> x = """[Chorus: Rihanna & Swizz Beatz] I just wanted you to know...more lyrics [Verse 2: Kanye West & Swizz Beatz] I be Puerto Rican day parade floatin' ... more lyrics"""
>>> [i.strip() for i in re.split(r'[\[\]]', x) if i]

# ['Chorus: Rihanna & Swizz Beatz', 'I just wanted you to know...more lyrics', 'Verse 2: Kanye West & Swizz Beatz', "I be Puerto Rican day parade floatin' ... more lyrics"]

答案 1 :(得分:0)

data=x.split(']')
print(data)
data=data[1::]
print(data)
location=0;
for i in data:
    data[location]=i.split('[')[0]
    location=location+1;
print(data)

我为你的初始输入得到了这个输出

['I just wanted you to know...more lyrics', "I be Puerto Rican day parade floatin'... more lyrics"]

我希望这会有所帮助

答案 2 :(得分:0)

根据python文档:https://docs.python.org/2/library/re.html

Python基本上是一种具有良好一致性的优秀语言,但仍然存在一些应该被解决的语言怪癖。你会认为 re.split()函数只有一个潜在的参数来决定是否返回分隔符。事实证明,无论出于何种原因,它是否返回分隔符都是基于输入。如果在re.split()中用括号括起你的正则表达式,Python将返回分隔符作为数组的一部分。

您可以尝试以下两种方法来实现目标:

re.split("]",string_here)

re.split("(])",string_here)

第一种方法将返回字符串并删除分隔符。第二种方法将返回字符串,其中分隔符仍在那里,作为单独的条目。

例如,在字符串&#34上运行第一个例子;这是一个字符串"会产生:

["这是"," 。字符串"]

运行第二个例子会产生:

["这是","]"," 。字符串"]

就个人而言,我不确定为什么他们做出了这种奇怪的设计选择。

答案 3 :(得分:0)

import re
...
input='[youwontseethis]what[hi]ever'
...
output=re.split('\[.*?\]',input)
print(output)

#['','what','ever']

如果输入字符串立即以“tag”开头,那么元组中的第一项将是一个空字符串。如果您不想要此功能,您也可以这样做:

import re
...
input='[youwontseethis]what[hi]ever'
...
output=re.split('\[.*?\]',input)
output=output[1:] if output[0] == '' else output
print(output)

#['what',ever']

要获取标签,只需替换

即可
output=re.split('\[.*?\]',input)

output=re.findall('\[.*?\]',input)

#['[youwontseethis]','[hi]']