如何在Python中进行部分拆分并获取字符串的第一部分?
有一个场景,我想分割一个字符串的一部分,然后拾取字符串的第一部分如何在Python中进行部分拆分并获取字符串的第一部分?,python,string,split,Python,String,Split,有一个场景,我想分割一个字符串的一部分,然后拾取字符串的第一部分 假设字符串可以像aloha_maui_d0_b0或new_york_d9_b10。注:d后为数字,可以是任何尺寸 我想在_d*之前部分剥掉任何线,即只想要_d0_b0或_d9_b10 在下面的代码中尝试过,但显然它也删除了拆分项 print(("aloha_maui_d0_b0").split("_d")) #Output is : ['aloha_maui', '0_b0'] #But
print(("aloha_maui_d0_b0").split("_d"))
#Output is : ['aloha_maui', '0_b0']
#But Wanted : _d0_b0
stArr = "aloha_maui_d0_b0".split("_d")
st2 = '_d' + stArr[1]
如果字符串中始终有一个“\u d”您可以使用index()
将其拆分为两部分:
s='aloha\u maui\u d0\u b0'
idx=s.指数(“U d”)
l=[s[:idx],s[idx:]
#l=['aloha_maui','u d0_b0']
编辑:如果字符串中有多个\u d
,也可以使用此选项:
s='aloha\u maui\u d0\u b0\u d1\u b1\u d2\u b2'
如果n==0或s.find(“”,d',n)==n,则idxs=[n表示范围(len(s))中的n]
部分=[s[i:j]表示zip中的i,j(idxs,idxs[1:][None])]
#部分=['aloha_maui'、'u d0_b0'、'u d1_b1'、'u d2_b2']
我有两个建议
分区()
使用方法partition()
获取包含分隔符作为元素之一的元组,并使用+
运算符获取所需字符串:
teste1 = 'aloha_maui_d0_b0'
partitiontest = teste1.partition('_d')
print(partitiontest)
print(partitiontest[1] + partitiontest[2])
输出:
('aloha_maui', '_d', '0_b0')
_d0_b0
new_york|_d9_b10
['new_york', '_d9_b10']
rio|_de_janeiro|_d3_b32
['rio', '_de_janeiro', '_d3_b32']
('rio_de_janeiro', '_d', '3_b32')
_d3_b32
partition()
方法返回一个元组,其中第一个元素是分隔符之前的元素,第二个元素是分隔符本身,第三个元素是分隔符之后的元素
该方法对它在字符串上找到的第一个分隔符大小写执行此操作,因此如果不对代码进行额外的处理,则不能使用它拆分为3个以上的分隔符。因此,我的第二个建议会更好
替换()
使用方法replace()
在分隔符(\u d
)前面插入一个或多个字符,并将其用作split()
方法上的分隔符
teste2 = 'new_york_d9_b10'
replacetest = teste2.replace('_d', '|_d')
print(replacetest)
splitlist = replacetest.split('|')
print(splitlist)
输出:
('aloha_maui', '_d', '0_b0')
_d0_b0
new_york|_d9_b10
['new_york', '_d9_b10']
rio|_de_janeiro|_d3_b32
['rio', '_de_janeiro', '_d3_b32']
('rio_de_janeiro', '_d', '3_b32')
_d3_b32
由于它替换了|u d
字符串上的所有_d
大小写,因此使用它拆分为2个以上的大小写没有问题
问题?
你可能需要小心的一种情况是不必要的分裂,因为存在的地方比预期的多
按照您的城市名称和数字示例的明显逻辑,您可能会有如下内容:
teste3 = 'rio_de_janeiro_d3_b32'
replacetest = teste3.replace('_d', '|_d')
print(replacetest)
splitlist = replacetest.split('|')
print(splitlist)
输出:
('aloha_maui', '_d', '0_b0')
_d0_b0
new_york|_d9_b10
['new_york', '_d9_b10']
rio|_de_janeiro|_d3_b32
['rio', '_de_janeiro', '_d3_b32']
('rio_de_janeiro', '_d', '3_b32')
_d3_b32
假设您总是将数字放在字符串的末尾,并且\u d
不会发生在数字中,rpartition()
可能是一个解决方案:
rpartitiontest = teste3.rpartition('_d')
print(rpartitiontest)
print(rpartitiontest[1] + rpartitiontest[2])
输出:
('aloha_maui', '_d', '0_b0')
_d0_b0
new_york|_d9_b10
['new_york', '_d9_b10']
rio|_de_janeiro|_d3_b32
['rio', '_de_janeiro', '_d3_b32']
('rio_de_janeiro', '_d', '3_b32')
_d3_b32
由于
rpartition()
在字符串的末尾开始搜索,并且只使用第一个匹配项将术语分隔为元组,因此您不必担心第一个术语(城市名称?)会导致意外拆分。使用正则表达式的拆分和保留分隔符功能:
重新导入
patre=re.compile(r“(\u d\d)”)
#它甚至不需要有\u d
——如果你使用一个函数,其中一个参数是分隔字符串的分隔符,这将使它可以复制。@monsieuralfonse64你是说这样的吗?我想这也不错。。def ret_str(val):return“_d”+val.split(“_d”)[1]@Vimo我指的是将等价的“_d”作为函数参数,但函数可以有两个参数–val
,这是要拆分的字符串,和sep
,用于拆分val
的分隔符这对拆分为2的字符串非常有效,但是对于任何较大的index()
将只返回第一个索引“\u d”