Python3: удалить подстроку между двумя символами-разделителями

1

Я ищу чистое решение в Python3, чтобы вырезать подстроку из строки (например, встроенный комментарий). Однако, если это нечетное число разделителей, то остальная часть текста должна быть удалена (как примечание в конце строки программирования)

вход:

s="abcd;efghij;kl;mn"

выход:

s="abcdkl"

Как это можно сделать так же, как.replaceAll в Java

Теги:
python-3.x
substring

3 ответа

1
Лучший ответ

Если у вас есть только два разделителя, вы можете использовать str.split() следующим образом:

In [15]: sp = s.split(';')

In [18]: result = sp[0] + sp[-1]

In [19]: result
Out[19]: 'abcdklmn'

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

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

In [25]: s
Out[25]: 'abcd;efghij;klmn'

In [26]: re.sub(r'(;[^;]*)?;', '', s)
Out[26]: 'abcdklmn'

In [27]: s="abcd;klmn"

In [28]: re.sub(r'(;[^;]*)?;', '', s)
Out[28]: 'abcdklmn'
  • 0
    Нужно решение и гораздо легче читать, чем Regex. Благодарю.
  • 0
    у вашего решения есть побочный эффект: если в строке нет или есть только один разделитель, то входная строка удваивается конкатенированной
Показать ещё 2 комментария
2

@Marcel, так как вы удовлетворены вышеуказанным подходом, предложенным @Kasramvd, это хорошо, и я хочу предложить вам написать простую крошечную функцию, используя ключевое слово lambda.

Вызовите его несколько раз с новыми параметрами и получите результат, как показано ниже.

Посетите и проверьте https://www.python-course.eu/lambda.php для подробных примеров.

См. Функцию лямбды Python для кратких знаний.

>>> get_string = lambda s: s.split(';')[0] + s.split(';')[-1]
>>>
>>> get_string("abcd;efghij;klmn")
'abcdklmn'
>>>
>>> get_string("ABCD;MONKEY;XYZ")
'ABCDXYZ'
>>>
>>> get_string("PYTHON;abcd;LEARN")
'PYTHONLEARN'
>>>
1

Вы можете сделать это с помощью регулярного выражения:

import re
delimiters = ';'
s = 'fsdfsd;sfdsfd;ffs'
reg_exp = "[" + delimiters + "].*[" + delimiters + "]"
new_s = re.sub(reg_exp, "", s)
print (new_s)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню