Вопрос-Ответ

How to extract the substring between two markers?

Как извлечь подстроку между двумя маркерами?

Допустим, у меня есть строка 'gfgfdAAA1234ZZZuijjk' и я хочу извлечь только '1234' часть.

Я знаю только, какими будут несколько символов непосредственно перед AAA и после ZZZ интересующей меня части 1234.

С помощью sed можно сделать что-то подобное со строкой:

echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"

И это даст мне 1234 в результате.

Как сделать то же самое в Python?

Переведено автоматически
Ответ 1

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

import re

text = 'gfgfdAAA1234ZZZuijjk'

m = re.search('AAA(.+?)ZZZ', text)
if m:
found = m.group(1)

# found: 1234

или:

import re

text = 'gfgfdAAA1234ZZZuijjk'

try:
found = re.search('AAA(.+?)ZZZ', text).group(1)
except AttributeError:
# AAA, ZZZ not found in the original string
found = '' # apply your error handling

# found: 1234
Ответ 2
>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'

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

Ответ 3

регулярное выражение

import re

re.search(r"(?<=AAA).*?(?=ZZZ)", your_text).group(0)

Приведенное выше "как есть" завершится ошибкой с AttributeError, если в нем нет "AAA" и "ZZZ" your_text

строковые методы

your_text.partition("AAA")[2].partition("ZZZ")[0]

Приведенное выше вернет пустую строку, если в your_text отсутствуют "AAA" или "ZZZ".

PS Python Challenge?

Ответ 4

Удивлен, что никто не упомянул об этом, это моя быстрая версия для одноразовых скриптов:

>>> x = 'gfgfdAAA1234ZZZuijjk'
>>> x.split('AAA')[1].split('ZZZ')[0]
'1234'
python string