Python regex заменить строку preserver wild char [duplicate]

Если вы хотите выяснить, действительно ли переменная, которую вы тестируете, явно пустым массивом, вы можете использовать что-то вроде этого:

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}
37
задан Arty 4 May 2010 в 09:12
поделиться

4 ответа

 re.sub(r'(?:_a)?\.([^.]*)$', r'_suff.\1', "long.file.name.jpg")

?: запускает группу без соответствия ( SO answer ), поэтому (?:_a) соответствует _a, но не перечисляет его, следующий вопросительный знак делает его необязательным.

Итак, по-английски, это говорит, что конец .<anything>, следующий за (или не), шаблон _a

Другой способ сделать это - использовать lookbehind ( см. здесь ). Упомя все это, потому что они очень полезны, но я не знал о них за 15 лет работы с REs

18
ответ дан Community 21 August 2018 в 12:02
поделиться

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

re.sub(r'(?<=long.file.name)(\_a)?(?=\.([^\.]*)$)' , r'_suff',"long.file.name.jpg")
>>> 'long.file.name_suff.jpg'

long.file.name и .jpg части используются для сопоставления, но они исключаются из замещения.

2
ответ дан Ahmet DAL 21 August 2018 в 12:02
поделиться

Поместите группу захвата вокруг части, которую вы хотите сохранить, а затем добавьте ссылку на эту группу захвата в текст замены.

re.sub(r'(\_a)?\.([^\.]*)$' , r'_suff.\2',"long.file.name.jpg")
75
ответ дан Amber 21 August 2018 в 12:02
поделиться
  • 1
    Спасибо за объяснение того, что вы делаете. – GreenMatt 8 December 2012 в 00:24
  • 2
    @Amber: Я выхожу из вашего ответа, что в отличие от str.replace () мы не можем использовать переменные a) в сырых строках; или b) в качестве аргумента для re; или c) оба. a) имеет смысл (я думаю), но я не уверен в b). Кажется, мы можем использовать имя переменной для строки, которую выполняет регулярное выражение. Не могли бы вы разъяснить? Благодарю. – Malik A. Rumi 9 June 2017 в 01:39

Просто поместите выражение для расширения в группу, запишите его и укажите совпадение в замене:

re.sub(r'(?:_a)?(\.[^\.]*)$' , r'_suff\1',"long.file.name.jpg")

Кроме того, использование группы, не содержащей захвата (?:…), предотвратит повторную запись к большой ненужной информации.

7
ответ дан Gumbo 21 August 2018 в 12:02
поделиться
  • 1
    Вам нужно либо скрыть обратную косую черту в \1, либо поместить его в r'', а не только ''. – Amber 4 May 2010 в 09:17
Другие вопросы по тегам:

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