2014-12-01 4 views
-8

Как разбить строку на второе подчеркивании в Python, так что я получаю что-то вроде этого имениPython разбить строку на подчеркивании

= this_is_my_name_and_its_cool

раскола имени, так что я получаю эту ["this_is", "my_name_and_its_cool"]

+3

Это не 'split' под знаком подчеркивания. –

+0

Почему вы разделяете только на второй знак подчеркивания? –

+0

Итак, как вы определили, что раскол будет на * втором * подчеркивании? Или вы хотите разбить на пятом месте с конца? –

ответ

1

Предполагая, что у вас есть строка с несколькими экземплярами одного и того же разделителя и вы хотите разбить на n-й разделитель, игнорируя остальные.

Вот решение, используя только split и join, без сложных регулярных выражений. Это может быть немного легче адаптировать к другим разделителям и, в частности, к другим значениям n.

def split_at(s, c, n): 
    words = s.split(c) 
    return c.join(words[:n]), c.join(words[n:]) 

Пример:

>>> split_at('this_is_my_name_and_its_cool', '_', 2) 
('this_is', 'my_name_and_its_cool') 
+0

Вот что я в итоге использовал.Я пишу инструменты для программного обеспечения Maya 3D, и эта функция теперь находится в общем утилите, где я могу использовать его во всех моих сценариях. Спасибо. – Willy

0

Я думаю, вы пытаетесь разделить строку на основе второго подчеркивания. Если да, то вы использовали функцию findall.

>>> import re 
>>> s = "this_is_my_name_and_its_cool" 
>>> re.findall(r'^[^_]*_[^_]*|[^_].*$', s) 
['this_is', 'my_name_and_its_cool'] 
>>> [i for i in re.findall(r'^[^_]*_[^_]*|(?!_).*$', s) if i] 
['this_is', 'my_name_and_its_cool'] 
+0

Сладкое спасибо: D – Willy

+0

@Willy отредактируйте свой вопрос, чтобы сказать, что вы пытаетесь разбить вход на основе второго символа '_'. –

+0

@Willy [Примите любой или ответы отсюда, которые вам больше всего помогли.] (Http://stackoverflow.com/help/accepted-answer) –

0
print re.split(r"(^[^_]+_[^_]+)_","this_is_my_name_and_its_cool") 

Попробуйте это.

0

следующее утверждение разделится имя в список строк

a=name.split("_") 

вы можете комбинировать любые строки, которые вы хотите использовать соединение, в этом случае, используя первый два слова

b="_".join(a[:2]) 
c="_",join(a[2:]) 

, может быть, вы можете написать небольшую функцию, которая принимает в качестве аргумента число слов (п), после чего вы хотите разделить

def func(name, n): 
    a=name.split("_") 
    b="_".join(a[:n]) 
    c="_".join(a[n:]) 
    return [b,c] 
+0

С 'n' и' n + 1' вы теряете слово (верхняя граница является эксклюзивной) –

+0

Спасибо tobias_k, я изменил его. – akrishnamo

0

Вот быстрый & грязный способ сделать это:

s = 'this_is_my_name_and_its_cool' 
i = s.find('_'); i = s.find('_', i+1) 
print [s[:i], s[i+1:]] 

выход

['this_is', 'my_name_and_its_cool'] 

Вы могли бы обобщить этот подход разделить на п-м сепараторе, поставив find() в цикл.