Найдите подстроку после nth '|'

Учитывая строку следующим образом:

1|2||||auc|0|1||0|||76u| ^ 

Каков наиболее эффективный способ вернуть подстроку после 5-го? Например, учитывая приведенную выше строку, результат должен быть:

 auc|0|1||0|||76u| 

16 Solutions collect form web for “Найдите подстроку после nth '|'”

Используйте str.split :

 s = '1|2

|auc|0|1||0

76u|' print s.split('|', 5)[-1] # auc|0|1||0

76u|

Обратите внимание, что это приведет к нежелательным результатам, если не будет не менее 5 | s, например,

 '1|2'.split('|', 5)[-1] # returns 2 - which isn't *after* the 5th 

присутствовать в строке, поэтому вы можете обернуть ее в try / except и force handle в случае, когда не хватает | s, так что результат после 5-го пуст, поскольку не было 5.

 try: rest = s.split('|', 5)[5] except IndexError: rest = '' 

Используйте метод str.split() с лимитом (второй аргумент):

 input_string.split('|', 5)[-1] 

Это разбивает строку 5 раз и берет последний элемент, у которого есть остальные | charaters нераскрытые.

Если их меньше 5 | символов в строке, вы все равно получите последний элемент из split, потому что [-1] подсчитывается с конца. Это означает, что выражение продолжает работать, даже если в расколе есть нулевые символы.

Демо-версия:

 >>> input_string = '1|2

|auc|0|1||0

76u|' >>> input_string.split('|', 5) ['1', '2', '', '', '', 'auc|0|1||0

76u|'] >>> input_string.split('|', 5)[-1] 'auc|0|1||0

76u|'

и цитируя документацию:

Если задано maxsplit, выполняется максимум maxsplit (таким образом, список будет иметь максимум maxsplit+1 элемент).

 def get_substring(my_string): count = 0 for i, char in enumerate(my_string): if char == '|': count += 1 if count == 5: return my_string[i+1:] 
 s = '1|2

|auc|0|1||0

76u|' sre = re.compile('([^|]*)(' + r*4 + ')(.*)') sre.search(s).groups() Out[39]: ('1', '|2

', '|auc|0|1||0

76u|') sre.search(s).group(3)[1:] Out[40]: 'auc|0|1||0

76u|'

  • разбор URL-адреса в python с изменением его части
  • Pandas: разделение кадра данных на несколько кадров данных по количеству строк
  • Почему расщепление строки медленнее на C ++, чем на Python?
  • Python: разделите строковое поле на 3 отдельных поля, используя Lambda
  • Только получить скрипты из HTML-файла
  • Обнаружить, скорее всего, слова из текста без пробелов / комбинированных слов
  • В Python, как следует извлекать второе имя каталога в пути?
  • Как разбить матрицу на 4 блока с помощью numpy?
  • Python - лучший язык программирования в мире.