Python基于不同的分隔符拆分字符串并加入结果

Python基于不同的分隔符拆分字符串并加入结果,python,Python,我正在尝试根据不同的分隔符拆分字符串。例如 Str_with_Delim1 = 'FirstPart_Delim1_SecondPart' Str_with_Delim2 = 'FirstPart_Delim2_SecondPart' 在程序的某个地方,我遇到了一个字符串S,它可以是Delim1或Delim2,我想去掉它并加入结果。如下所示: #example of what I'd like to achieve ''.join(S.split('_Delim1' or '_Delim2')

我正在尝试根据不同的分隔符拆分字符串。例如

Str_with_Delim1 = 'FirstPart_Delim1_SecondPart'
Str_with_Delim2 = 'FirstPart_Delim2_SecondPart'
在程序的某个地方,我遇到了一个字符串
S
,它可以是
Delim1
Delim2
,我想去掉它并加入结果。如下所示:

#example of what I'd like to achieve
''.join(S.split('_Delim1' or '_Delim2'))
#result of above split: 'FirstPart_SecondPart'
我只需几行
if else
检查即可:

if '_Delim1' in  S:
    ''.join(S.split('_Delim1'))
else:
    ''.join(S.split('_Delim2'))
但我猜是否有更好的方法来实现这一点: 我在SO上找到的所有解决方案都与使用多个分隔符拆分字符串有关

import re

''.join(re.split(r'_Delim1|_Delim2', S))
与使用
if-else
语句相比,是否可以更简洁地实现它?

您可以在两个分隔符上使用and进行拆分

import re

''.join(re.split(r'_Delim1|_Delim2', S))
可以在两个分隔符上使用和进行拆分

import re

''.join(re.split(r'_Delim1|_Delim2', S))
你可以使用,方法

重新导入
对于['FirstPart_Delim1_SecondPart'、'FirstPart_Delim2_SecondPart']中的s:
打印(重新拆分)
产生

['FirstPart', 'SecondPart']
['FirstPart', 'SecondPart']
你可以使用,方法

重新导入
对于['FirstPart_Delim1_SecondPart'、'FirstPart_Delim2_SecondPart']中的s:
打印(重新拆分)
产生

['FirstPart', 'SecondPart']
['FirstPart', 'SecondPart']

所以,据我所知,您想将一些动态分隔符替换为单下划线

因此,您需要使用正则表达式:

import re

s = 'FirstPart_Delim1_SecondPart'


# this pattern for your example
pattern = r'_Delim[0-9+]_'

# replace your custom delimiter to single underling
s = re.sub(pattern, '_', s)

# output will - FirstPart_SecondPar
print(s)
表达式
\u Delim[0-9+]\u
表示您可以传递带有“Delim”字符串的任何数字(不仅仅是1或2),它将正常工作


这种方法也很好,因为您不需要将字符串转换为列表,也不需要将字符串转换为列表。

据我所知,您想将一些动态分隔符替换为单下划线吗

因此,您需要使用正则表达式:

import re

s = 'FirstPart_Delim1_SecondPart'


# this pattern for your example
pattern = r'_Delim[0-9+]_'

# replace your custom delimiter to single underling
s = re.sub(pattern, '_', s)

# output will - FirstPart_SecondPar
print(s)
表达式
\u Delim[0-9+]\u
表示您可以传递带有“Delim”字符串的任何数字(不仅仅是1或2),它将正常工作


这个方法也很好,因为你不需要将字符串转换成列表,你总是可以使用字符串。

我知道这是可行的:
'.join(S.split('u Delim1'如果'u Delim1'在S else''u Delim2'))
这个
'.join(无论什么.split(delim))
逻辑很奇怪;这相当于删除分隔符->
字符串。replace(delim1',)。replace(delim2',)
效果很好enough@StefanB老实说,没那么奇怪。例如,当您使用单个分隔符时,您的建议要好得多。以你为例,即使是两个也是合理的。如果你有一个,比如说,10个分隔符的列表呢?答案中提供的
re
解决方案变得更加合理了,我知道这是可行的:
'.join(S.split('u Delim1'如果'u Delim1'在S else''u Delim2'))
The
'.join(无论什么.split(delim))
逻辑很奇怪;这相当于删除分隔符->
字符串。replace(delim1',)。replace(delim2',)
效果很好enough@StefanB老实说,没那么奇怪。例如,当您使用单个分隔符时,您的建议要好得多。以你为例,即使是两个也是合理的。如果你有一个,比如说,10个分隔符的列表呢?答案中提供的
re
解决方案变得更加合理