Как я могу получить строку после определенной подстроки?
Например, я хочу , чтобы получить строку после того, как "world"
вmy_string="hello python world , i'm a beginner "
Самый простой способ, вероятно, просто разделить на целевое слово
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split принимает слово (или символ) для разделения и, по желанию, ограничение на количество разделений.
В этом примере разделить на «мир» и ограничить его только одним разделением.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(или...[2]
) быстрее.Если вы хотите иметь дело со случаем , когда
s2
это не присутствует вs1
, а затем использоватьs1.find(s2)
в противоположностьindex
. Если возвращаемое значение этого вызова-1
, тоs2
не вs1
.источник
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Я удивлен, что никто не упомянул
partition
.ИМХО, это решение более читабельно, чем @ arshajii's. Кроме этого, я думаю, что @ arshajii's лучше всего подходит для того, чтобы быть самым быстрым - он не создает ненужных копий / подстрок.
источник
str.split(..., 1)
.Вы хотите использовать
str.partition()
:потому что этот вариант быстрее, чем альтернативы .
Обратите внимание, что это создает пустую строку, если разделитель отсутствует:
Если вы хотите получить исходную строку, проверьте, не является ли второе значение, возвращаемое из
str.partition()
, непустым:Вы также можете использовать
str.split()
с пределом 1:Однако этот вариант медленнее . В лучшем случае
str.partition()
это на 15% быстрее по сравнению сstr.split()
:Это показывает время выполнения на входе, здесь разделитель отсутствует (сценарий наихудшего случая), помещается первым (сценарий наивысшего варианта) или в нижней половине, верхней половине или последней позиции. Самое быстрое время помечено
[...]
и<...>
отмечает худшее.Приведенная выше таблица составлена путем комплексного испытания времени для всех трех вариантов, представленных ниже. Я провел тесты на Python 3.7.4 на модели MacBook Pro с диагональю 15 дюймов в 2017 году, Intel Core i7 с частотой 2,9 ГГц и оперативной памятью 16 ГБ.
Этот сценарий генерирует случайные предложения с наличием случайно выбранного разделителя и без него, и, если он присутствует, в разных позициях сгенерированного предложения, запускает тесты в случайном порядке с повторениями (производя самые точные результаты, учитывающие случайные события ОС, происходящие во время тестирования), а затем печатает таблицу результатов:
источник
Если вы хотите сделать это с помощью регулярных выражений, вы можете просто использовать группу без захвата , чтобы получить слово «мир», а затем захватить все после, например, так
Пример строки проверяется здесь
источник
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Вы можете использовать этот пакет под названием "substring". Просто введите "pip install substring". Вы можете получить подстроку, просто упомянув начальный и конечный символы / индексы.
Например:
Вывод:
s = defghijklmn
источник
Это старый вопрос, но я столкнулся с тем же сценарием, мне нужно разбить строку, используя в качестве демилитера слово «низкий», проблема для меня заключалась в том, что у меня в одной строке слово ниже и ниже.
Я решил это с помощью повторного модуля таким образом
используйте re.split с регулярным выражением, чтобы найти точное слово
общий код:
Надеюсь, что это может помочь кому-то!
источник
string.partition(" low ")[2]
? (Обратите внимание на пробелы по обе стороны отlow
Попробуйте этот общий подход:
источник
В Python 3.9
removeprefix
добавляется новый метод:источник