Как удалить строку до первого появления ключевого слова в python? - PullRequest
1 голос
/ 25 апреля 2019

Например, мы хотим удалить все символы до первого a из 123a45b6a789. Как получить правильный результат 45b6a789?

Я пытался re.sub('.*a', '', '123a45b6a789'), но это дает 789.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 25 апреля 2019

Прежде всего, использование не жадного подстановочного знака *? предотвратит сожжение всей строки вплоть до последнего a.

Но этого недостаточно.Этот код проиллюстрирует проблему:

print(re.findall(r'.*?a', '123a45b6a789')) # => ['123', '45b6'] # <-- whoops, matched twice

Поэтому вы можете использовать параметр подсчета re.sub, чтобы ограничиться первым совпадением:

re.sub(r'.*?a', '', '123a45b6a789', 1)
#                                 ^^^

Или использовать началоякорь:

re.sub(r'^.*?a', '', '123a45b6a789')

Или полностью пропустить регулярное выражение и использовать решение constt .

1 голос
/ 25 апреля 2019
>>> s = '123a45b6a789'
>>> s[s.find('a') + 1:]
'45b6a789'
0 голосов
/ 25 апреля 2019

Как сказал Чан: «мы хотим удалить все символы перед первым а», другими словами, нам нужно удалить все символы, которые не являются «а», от начала до «а», поэтому мы должны удалить первый не-строка и первый a, ^[^a]*a.

import re
print re.sub("^[^a]*a", u"", u"123a45b6a789")  # output: 45b6a789
print re.sub("^[^a]*", u"", u"123a45b6a789")   # output: a45b6a789

Я просто проверяю затраты времени на некоторые методы в Python2.7 linux 16.04, мой метод более быстрый, как показано ниже:

%timeit _ = re.sub("^[^a]*a", u"", '24579999999999999999999999999999999999999999999999999999999999999912734162854614678567ijkljklhhjkja45b6a789')
#1000000 loops, best of 3: 1.29 µs per loop

%timeit _ = re.sub('^.*?a', '', '24579999999999999999999999999999999999999999999999999999999999999912734162854614678567ijkljklhhjkja45b6a789')
# 1000000 loops, best of 3: 1.93 µs per loop
0 голосов
/ 25 апреля 2019

Используйте не жадный ?

re.sub('.*?a', '', '123a45b6a789')` but it gives `789`

Я бы предложил опробовать регулярные выражения в веб-приложениях регулярных выражений, чтобы помочь демистифицировать это. Просто Google Regex, и вы найдете один.

0 голосов
/ 25 апреля 2019

Ну, есть масса разных способов кожи кошки. Но вы можете сделать что-то вроде следующего:

def removeCharBeforeKey(string, key):
    return key.join(string.split(key)[1:]))

где ключ это ключевое слово (a), например. и строка является вашим вводом (123a45b6a789) в этом примере.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...