您如何在保持'(':
)的同时拆分此字符串s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
x = s.split("(")
print(x)
我也尝试过:
x = s.split("?=(")
但它不起作用。
谢谢
答案 0 :(得分:0)
如果您只需要保留分隔符,可以在拆分后重新引入它:
def split_keep_separator(source, sep):
elements = source.split(sep)
return [e for t in zip(elements, [sep] * (len(elements))) for e in t][:-1]
并测试它:
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
x = split_keep_separator(s, "(")
print(x)
# [' playsound3Dwhenpossible',
# '(',
# 'soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
答案 1 :(得分:0)
如果你想保留分隔符'('在输出数组中,最简单的方法是使用正则表达式分割。
env CL_CONTEXT_EMULATOR_DEVICE_ALTERA=1 gdb ./host
答案 2 :(得分:0)
根据您的输入字符串,似乎您的预期输出可能是,
[' playsound3Dwhenpossible', '(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
如果是这样,这对我来说似乎最简单
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
print s.replace("(","*(").split('*')
首先替换而不是拆分。
您可以使用原始字符串中的 NOT ,而不是'*'
。
答案 3 :(得分:0)
另一种基于正则表达式的解决方案:
import re
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
splits = re.findall(r'(\(?[^(]+)', s)
print(splits)
输出:
[' playsound3Dwhenpossible', '(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
或者如果你想拥有通用(或易于使用)的功能:
split_keep = lambda s, sep : re.findall('({0}?[^{0}]+)'.format(re.escape(sep)), s)
splits = split_keep(s, '(')
在具有多个连续分隔符的角落情况下失败。以下稍微复杂的功能修复了它:
split_keep = lambda s, sep : re.findall('({0}[^{0}]*|{0}?[^{0}]+)'.format(re.escape(sep)), s)
print(split_keep('((asda((asfasf', '('))
输出:
['(', '(asda', '(', '(asfasf']
答案 4 :(得分:0)
您可以稍微将分割更改为:
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
x = s.split(r'\(') #raw
print(x)
输出:
[' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']