如何在python中通过保留分隔符来拆分元素
嗨,我如何在保留“(”)的同时拆分此字符串: 我还尝试了:如何在python中通过保留分隔符来拆分元素,python,Python,嗨,我如何在保留“(”)的同时拆分此字符串: 我还尝试了: x = s.split("?=(") 但它没有起作用 谢谢如果您只需要保留分隔符,可以在拆分后重新引入: 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 = ' p
x = s.split("?=(")
但它没有起作用
谢谢如果您只需要保留分隔符,可以在拆分后重新引入:
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);']
如果要在输出数组中保留分隔符“(”,最简单的方法是使用正则表达式拆分
import re
s = ' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);'
x = re.split(r'(\()', s)
根据您的输入字符串,您的预期输出可能是
[' 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('*')
首先替换,然后拆分
您可以使用原始字符串中而不是
'*'
的任何内容来代替。另一个基于正则表达式的解决方案:
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);']
['(', '(asda', '(', '(asfasf']
[' 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', '('))
输出:
[' playsound3Dwhenpossible', '(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
['(', '(asda', '(', '(asfasf']
[' 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);'
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);']
['(', '(asda', '(', '(asfasf']
[' playsound3Dwhenpossible(soundspotpoint18, %$videos_sounds_path%/sounds/lavazza_-_auguri_cherubini__15_.mp3, true, false, -52.644483, 0.947368, 90, 1, spotpoint18);']
在您的例子中,“保留分隔符”是什么意思?分隔符作为结果列表中的一个单独元素或与相邻元素之一相连?为什么要保留分隔符?如果使用正则表达式和组从字符串中提取信息以提取它们。