首页 > 解决方案 > Split function with multiple delimiters such as ( and ,

问题描述

Anyone help me with multiple delimiters for split function? For instance, given a string "#1(X,Y)", I want to use delimiters such as (, ',', ) to get a set like ('#1', 'X', 'Y')

I have tried re.split(' \\( | , | \\) ', '#1(X,Y)') but get ['#1', 'X, Y', '']

标签: pythonregex

解决方案


你的例子没有按照你说的做。

>>> s = "#1(X,Y)" 
>>> import re
>>> re.split(' \\( | , | \\) ', s)
['#1(X,Y)']

您的字符串不包含任何这些表达式;你可能是说

>>> re.split('\\(|,|\\)', s)
['#1', 'X', 'Y', '']

可以重构为类似

>>> re.split(r'\s*[(,)]\s*', s)
['#1', 'X', 'Y', '']

使用更简单、更优雅和惯用的正则表达式,并允许在分隔符周围使用可选的空格。

没有任何明智的方法可以真正阻止 Python 在与字符串开头或结尾相邻的分隔符之前或之后找到空字符串;可能只是从开头和结尾过滤掉空字符串,或者预处理字符串以在正则表达式匹配之前从开头和结尾删除分隔符。


推荐阅读