You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python分割元素时如何保留分隔符?含保留'('的实操问题

分割字符串时保留分隔符'('的解决方案

看起来你想要在分割字符串时保留分隔符(,普通的str.split()和简单的正则分割确实达不到这个效果,我来给你两种常用的实现方式,对应不同的需求场景:

首先先明确你的原字符串:

s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'

场景1:把(留在前一个分割片段的末尾

比如你想要得到这样的结果:

[' playsound3Dwhenpossible(', 'soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']

可以用正则的捕获组来实现,因为re.split()会把捕获组里的内容保留在分割结果中,之后我们只需要把相邻的非分隔符片段和分隔符合并即可:

import re

split_parts = re.split(r'(\()', s)
# 合并相邻的片段和分隔符
result = []
for i in range(0, len(split_parts), 2):
    if i + 1 < len(split_parts):
        result.append(split_parts[i] + split_parts[i+1])
    else:
        result.append(split_parts[i])

print(result)

这个方法也适用于字符串中有多个(的情况,比如如果你的字符串是"func1(param1)func2(param2)",会得到['func1(', 'param1)func2(', 'param2)'],完美保留每个(在对应函数名的末尾。

场景2:把(留在后一个分割片段的开头

如果你想要的结果是(紧跟在后面的参数部分开头,比如:

[' playsound3Dwhenpossible', '(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']

那直接用正向先行断言的正则分割就可以了,先行断言只会匹配(前面的位置,不会消耗(本身,所以分割后(会完整保留在后面的片段里:

import re

result = re.split(r'(?=\()', s)
print(result)

为什么你之前尝试的split("?=(")不行?因为你没有把它当作正则表达式来用,str.split()的参数如果是字符串的话,会直接按字面匹配,而(?=\()是正则语法,必须用re.split()来处理才行。

希望这两种方式能解决你的问题!

内容的提问来源于stack exchange,提问作者V.Cozzatella

火山引擎 最新活动