Всегда ли регулярный поиск в текстовом и бинарном режиме возвращает один и тот же результат?

Вы можете использовать рекурсию для обработки объекта вложенных требований.

function findMissingKeys(obj, keyPath = null, missingKeys = []) {  
  for(let key in obj) {
    if (typeof obj[key] === 'object') {
      findMissingKeys(obj[key], key, missingKeys)
    } else if (obj[key] === "") {
      if (keyPath) {
        missingKeys.push(`${keyPath}.${key}`);
      } else {
        missingKeys.push(key);
      }
    }
  }
  return missingKeys
}

function validateDepartment() {
  try {
    const textArea = document.getElementById("textArea")
    const departmentObject = JSON.parse(textArea.value)
    const missingKeys = findMissingKeys(departmentObject)
    console.log({ missingKeys })
  } catch(e) {
    alert(e)
  }
}

validateDepartment()
<h4>Department Validator</h4>
<textarea id="textArea" cols=50 rows=10>
  {
    "position": "",
    "name": "",
    "link": "",
    "state": "",
    "requirements": {
      "age": "",
      "citizenship": "",
      "degree": ""
    },
    "salary": "",
    "description": ""
  }
</textarea>
<hr>
<button onclick="validateDepartment()">
  Validate
</button>

0
задан Cyker 18 January 2019 в 18:01
поделиться

2 ответа

ответ: нет

пример: test('[–]', '–')

обратите внимание, что это «дефис», а не дефис - любой не-ASCII символ должен иметь такое же поведение

0
ответ дан Sam Mason 18 January 2019 в 18:01
поделиться

Основное различие заключается в классах.

Например, U + 00FF - это "ÿ", но не символ ASCII. Так что \w (Соответствует «символу слова» или буквам)

re.search(r'\w', '\xFF')  # match
re.search(rb'\w', b'\xFF')  # no match
re.search(rb'\w', '\xFF'.encode())  # still no match

(И другие буквы Unicode тоже подойдут)

Если вы посмотрите https: // docs .python.org / 3 / library / re.html , вы можете увидеть три класса, к которым это относится:

\d

Для шаблонов Unicode (str) :

Соответствует любой десятичной цифре Юникода (то есть любому символу в категории символов Юникода [Nd]). Это включает в себя [0-9], а также много других цифровых символов. Если используется флаг ASCII, сопоставляется только [0-9].

Для 8-битных (байтовых) шаблонов:

Соответствует символам, которые считаются пробелами в наборе символов ASCII; это эквивалентно [ \t\n\r\f\v].

\s

Для шаблонов Unicode (str):

Соответствует символам пробела Unicode (который включает в себя [ \t\n\r\f\v], а также многие другие символы, например неразрывные пробелы, предписанные правилами типографики во многих языках). Если используется флаг ASCII, сопоставляется только [ \t\n\r\f\v].

Для 8-битных (байтовых) шаблонов:

Соответствует символам, которые считаются пробелами в наборе символов ASCII; это эквивалентно [ \t\n\r\f\v].

\w

Для шаблонов Unicode (str):

Соответствует символам слов Unicode; это включает в себя большинство символов, которые могут быть частью слова на любом языке, а также цифры и подчеркивание. Если используется флаг ASCII, сопоставляется только [a-zA-Z0-9_].

Для 8-битных (байтовых) шаблонов:

Соответствует символам, которые считаются буквенно-цифровыми в наборе символов ASCII; это эквивалентно [a-zA-Z0-9_]. Если используется флаг LOCALE, соответствует символам, которые считаются буквенно-цифровыми в текущей локали и подчеркивании.

Таким образом, если вы установите флаг ASCII , они должны быть в основном одинаковыми.

Для вашей точной функции, пример будет: test(r'\w|.', '\xFF')

0
ответ дан Artyer 18 January 2019 в 18:01
поделиться
Другие вопросы по тегам:

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