Допустим, у меня есть строка, 'gfgfdAAA1234ZZZuijjk'
и я хочу извлечь только '1234'
часть.
Я знаю только, что будет с несколькими персонажами непосредственно до AAA
и после ZZZ
той части, которая меня интересует 1234
.
С помощью sed
этого можно сделать что-то подобное со строкой:
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
И это даст мне 1234
в результате.
Как сделать то же самое в Python?
Затем вы можете использовать регулярные выражения с модулем re, если хотите, но в вашем случае это не обязательно.
источник
re
Способ не быстрее, хотя?s
,s.find
вернется-1
. оператор срезаs[begin:end]
примет его как допустимый индекс и вернет нежелательную подстроку.регулярное выражение
Вышеуказанное как-не удастся с,
AttributeError
если нет "AAA" и "ZZZ" вyour_text
строковые методы
Выше будет возвращать пустую строку, если "AAA" или "ZZZ" не существует в
your_text
.PS Python Challenge?
источник
источник
AttributeError: 'NoneType' object has no attribute 'groups'
- если в строке нет AAA, ZZZ ...Удивило, что никто не упомянул об этом, что является моей быстрой версией для одноразовых скриптов:
источник
Вы можете сделать, используя только одну строку кода
результат получит список ...
источник
Вы можете использовать модуль re для этого:
источник
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
Вы можете сделать то же самое с
re.sub
функцией, используя тот же регулярное выражение.В базовом sed группа захвата представлена как
\(..\)
, а в python -(..)
.источник
В Python извлечение строки формы подстроки можно выполнить с помощью
findall
метода вre
модуле регулярного выражения ( ).источник
источник
источник
дает
источник
На всякий случай кому-то придется делать то же самое, что и я. Я должен был извлечь все в скобках в строке. Например, если у меня есть строка вроде «Президент США (Барак Обама) встретился с…», и я хочу получить только «Барак Обама»), это решение:
Т.е. вам нужно заблокировать круглые скобки
slash \
знаком. Хотя это проблема более регулярных выражений, чем Python.Кроме того, в некоторых случаях вы можете увидеть символы 'r' перед определением регулярного выражения. Если префикса r нет, вам нужно использовать escape-символы, как в C. Здесь более подробно об этом.
источник
Использование PyParsing
что дает:
[['1234']]
источник
Вот решение без регулярных выражений, которое также учитывает сценарии, в которых первая подстрока содержит вторую подстроку. Эта функция найдет только подстроку, если второй маркер находится после первого маркера.
источник
Другой способ сделать это - использовать списки (предположим, что искомая подстрока состоит только из чисел):
источник
Один лайнер, который возвращает другую строку, если не было совпадения. Редактировать: улучшенная версия использует
next
функцию,"not-found"
при необходимости заменить на что-то другое:Мой другой способ сделать это, менее оптимальный, использует регулярное выражение во второй раз, но не нашел более короткого пути:
источник