Использование переменной в выражении регулярного выражения - escape-символы [duplicate]

Недавно у вас был тот же вопрос и успешно использовался https://npmjs.org/package/tea-properties , который также set вложенных объектов / массивов:

get :

var o = {
  prop: {
    arr: [
      {foo: 'bar'}
    ]
  }
};

var properties = require('tea-properties');
var value = properties.get(o, 'prop.arr[0].foo');

assert(value, 'bar'); // true

set:

var o = {};

var properties = require('tea-properties');
properties.set(o, 'prop.arr[0].foo', 'bar');

assert(o.prop.arr[0].foo, 'bar'); // true

171
задан S.Lott 11 November 2008 в 15:29
поделиться

4 ответа

Используйте функцию re.escape() для этого:

4.2.3 re Содержание модуля

escape (string)

Возвращаемая строка со всеми неалфавитными спицами; это полезно, если вы хотите сопоставить произвольную литеральную строку, которая может иметь в ней метасимволы регулярного выражения.

Простейший пример, поиск любого присутствия предоставленной строки, необязательно сопровождаемого 's', и вернуть объект соответствия.

def simplistic_plural(word, text):
    word_or_plural = re.escape(word) + 's?'
    return re.match(word_or_plural, text)
237
ответ дан 200_success 25 August 2018 в 08:34
поделиться

Вы можете использовать re.escape () :

re.escape (string) Возвращаемая строка со всеми неалфавитами обратной косой черты; это полезно, если вы хотите сопоставить произвольную литеральную строку, которая может содержать метасимволы регулярного выражения.

>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
43
ответ дан gimel 25 August 2018 в 08:34
поделиться

Попробуйте:

\ Q и \ E в качестве якорей

Поместите условие Or в соответствие с полным словом или регулярным выражением.

Ref Ссылка: Как совместить целое слово, которое включает специальные символы в регулярном выражении

-2
ответ дан guru 25 August 2018 в 08:34
поделиться

К сожалению, re.escape() не подходит для заменяющей строки:

>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'

Решение состоит в том, чтобы поместить замену в лямбда:

>>> re.sub('a', lambda _: '_', 'aa')
'__'

, потому что возвращаемое значение лямбда обрабатывается re.sub() как литеральная строка.

0
ответ дан Owen 25 August 2018 в 08:34
поделиться
Другие вопросы по тегам:

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