объединение исходных строк с неровной строкой [дубликат]

ES6: только одна строка в Vanila JS (она возвращает null, если не находит, а не дает ошибку):

'path.string'.split('.').reduce((p,c)=>p&&p[c]||null, MyOBJ)

или пример:

'a.b.c'.split('.').reduce((p,c)=>p&&p[c]||null, {a:{b:{c:1}}})

Для готовая к использованию функция, которая также распознает false, 0 и отрицательное число и принимает значения по умолчанию в качестве параметра:

const resolvePath = (object, path, defaultValue) => path
   .split('.')
   .reduce((o, p) => o ? o[p] : defaultValue, object)

Пример для использования:

resolvePath(window,'document.body') => <body>
resolvePath(window,'document.body.xyz') => undefined
resolvePath(window,'document.body.xyz', null) => null
resolvePath(window,'document.body.xyz', 1) => 1

Бонус :

Чтобы установить путь (запрошенным @ rob-gordon), вы можете использовать:

const setPath = (object, path, value) => path
   .split('.')
   .reduce((o,p) => o[p] = path.split('.').pop() === p ? value : o[p] || {}, object)

Пример:

let myVar = {}
setPath(myVar, 'a.b.c', 42) => 42
console.log(myVar) => {a: {b: {c: 42}}}

Доступ к массиву доступа с [] :

const resolvePath = (object, path, defaultValue) => path
   .split(/[\.\[\]\'\"]/)
   .filter(p => p)
   .reduce((o, p) => o ? o[p] : defaultValue, object)

пример

const myVar = {a:{b:[{c:1}]}}
resolvePath(myVar,'a.b[0].c') => 1
resolvePath(myVar,'a["b"][\'0\'].c') => 1
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 27 August 2018 в 18:57
поделиться

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

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

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

Попробуйте:

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

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

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

-2
ответ дан guru 27 August 2018 в 18:57
поделиться

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

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

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

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

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

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

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