revert re.sub назад выполнение [дубликат]

Кажется, что с operator.add возникает путаница! Когда вы добавляете два списка вместе, правильным термином для этого является concat, а не добавлять. operator.concat - это то, что вам нужно использовать.

Если вы думаете о функциональности, это так же просто, как это ::

>>> list2d = ((1,2,3),(4,5,6), (7,), (8,9))
>>> reduce(operator.concat, list2d)
(1, 2, 3, 4, 5, 6, 7, 8, 9)

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

>>> list2d = [[1,2,3],[4,5,6], [7], [8,9]]
>>> reduce(operator.concat, list2d)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Aha, вы получите список.

Как насчет производительности ::

>>> list2d = [[1,2,3],[4,5,6], [7], [8,9]]
>>> %timeit list(itertools.chain.from_iterable(list2d))
1000000 loops, best of 3: 1.36 µs per loop

from_iterable довольно быстро! Но это не сравнимо с уменьшением с concat.

>>> list2d = ((1,2,3),(4,5,6), (7,), (8,9))
>>> %timeit reduce(operator.concat, list2d)
1000000 loops, best of 3: 492 ns per loop
119
задан mawueth 24 September 2012 в 21:28
поделиться

6 ответов

Самый простой способ, вероятно, состоит в том, чтобы разделить ваше целевое слово

my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1] 

split разбивает слово (или символ) на разделение и, возможно, ограничение на количество разделов.

В этом примере разбивается на «мир» и ограничивается только одним разделом.

236
ответ дан Don Kirkby 26 August 2018 в 06:49
поделиться
s1 = "hello python world , i'm a beginner "
s2 = "world"

print s1[s1.index(s2) + len(s2):]

Если вы хотите иметь дело с случаем, когда s2 - , а не , присутствующим в s1, используйте s1.find(s2) в отличие от index. Если возвращаемое значение этого вызова равно -1, то s2 не находится в s1.

33
ответ дан arshajii 26 August 2018 в 06:49
поделиться

Если вы хотите сделать это с помощью регулярного выражения, вы можете просто использовать группу без захвата , чтобы получить слово «мир», а затем захватить все после этого, например

(?:world).*

Пример строки тестируется здесь

15
ответ дан Community 26 August 2018 в 06:49
поделиться

Это старый вопрос, но я столкнулся с одним и тем же сценарием, мне нужно разделить строку, используя в качестве демилитарята слово «low», для меня проблема заключалась в том, что у меня в одной строке слово ниже и ниже.

Я решил это с помощью re-модуля таким образом

import re

string = '...below...as higher prices mean lower demand to be expected. Generally, a high reading is seen as negative (or bearish), while a low reading is seen as positive (or bullish) for the Korean Won.'

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

stringafterword = re.split('\\blow\\b',string)[-1]
print(stringafterword)
' reading is seen as positive (or bullish) for the Korean Won.'

общий код is:

re.split('\\bTHE_WORD_YOU_WANT\\b',string)[-1]

Надеюсь, это поможет кому-то!

2
ответ дан Leonardo Hermoso 26 August 2018 в 06:49
поделиться

Я удивлен, что никто не упомянул partition.

def substring_after(s, delim):
    return s.partition(delim)[2]

IMHO, это решение более читаемо, чем @ arshajii's. Кроме этого, я думаю, что @ arshajii's является лучшим для того, чтобы быть самым быстрым - он не создает лишних копий / подстрок.

30
ответ дан shx2 26 August 2018 в 06:49
поделиться

Вы можете использовать этот пакет под названием «подстрока». Просто введите «pip install substring». Вы можете получить подстроку, просто указав начальные и конечные символы / индексы.

Например:

import substring

s = substring.substringByChar("abcdefghijklmnop", startChar="d", endChar="n")

print(s)

Выход:

s = defghijklmn

1
ответ дан Yatendra 26 August 2018 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: