如何在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

有一个场景,我想分割一个字符串的一部分,然后拾取字符串的第一部分

  • 假设字符串可以像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 Wanted : _d0_b0
    
  • 有没有其他方法可以得到部分?我需要在regexp中试用吗?。让我平行地试一下

  • 非常感谢您的任何建议。谢谢你

    就这样怎么样

    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”