Python “如何根据两个字符进行拆分”;[“和”和“];一串

Python “如何根据两个字符进行拆分”;[“和”和“];一串,python,python-3.x,split,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

例如,对以下对象调用.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]
另外,您将如何保存括号中已删除的部分,谢谢。用一个未知字符串在两个对象内进行拆分很困难:/

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"]

我希望这有助于使用
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"]

根据python文档:

Python大体上是一种具有良好一致性的优秀语言,但该语言仍有一些需要解决的问题。您可能会认为re.split()函数只有一个潜在的参数来决定是否返回分隔符。结果表明,无论出于何种原因,它是否返回分隔符都取决于输入。如果在re.split()中用括号括住正则表达式,Python将返回分隔符作为数组的一部分

以下是两种实现目标的方法:

re.split("]",string_here)

第一种方法将返回删除分隔符的字符串。第二种方法将返回分隔符仍然存在的字符串,作为单独的条目

例如,对字符串“This is]a string”运行第一个示例将产生:

[“这是一个”、“字符串”。]

运行第二个示例将产生:

[“这是一个“,”],“字符串”。]

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

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

#['','what','ever']
如果输入字符串立即以您的示例中的“标记”开头,则元组中的第一项将是空字符串。如果不需要此功能,也可以执行以下操作:

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)


看看我有,但还是不知道怎么做这和你的有什么不同?另外,您希望此示例文本的输出是什么?
x.split()
不会生成您声明的列表,您也没有提到您想要什么。这个问题目前无法回答。你能把你的代码变成一个工作的例子,然后包含期望的结果吗?否则,我们需要关闭它。您可能会认为re.split()函数只有一个潜在的参数来决定是否返回分隔符。不是真的。。。正则表达式可以有多个组,它们都将被返回。这不仅仅是单个分隔符的问题,即使是在多个分隔符的情况下,它也是基于一个模式拆分字符串。因此,它必须知道字符串的哪个子集与模式匹配,它知道哪个子集作为分隔符匹配,但问题是,应该返回分隔符的哪个部分?规则很简单:所有捕获组。如果我在
r“\s+”
上拆分,则不会返回任何捕获组和分隔符。但是关于
s=“aaa[1,2]bbb[3,4]ccc”
呢<代码>重新拆分(r“\s*\[(\d+)\s*,\s*(\d+)\s*\]\s*”,s)返回
['aaa'、'1'、'2'、'bbb'、'3'、'4'、'ccc']
。在正则表达式之外有一个参数告诉您要使用哪些捕获组,这将更加复杂。
output=re.split('\[.*?\]',input)
output=re.findall('\[.*?\]',input)

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