Это можно сделать в python с модулем regex . Что-то вроде:
import regex as re
pattern = re.compile(r'[\W_--[ ]]+')
cleanString = pattern.sub('', rawString)
Обычно вы устанавливаете модуль regex с помощью pip :
pip install regex
EDIT:
Модуль регулярных выражений имеет два варианта поведения: версия 0 и версия 1. Упорядочение (как указано выше) - это поведение версии 1. Требование pypi docs версии 1 является поведением по умолчанию, но вы можете обнаружить, что это не так. Вы можете проверить с помощью
import regex
if regex.DEFAULT_VERSION == regex.VERSION1:
print("version 1")
Чтобы установить его в версию 1:
regex.DEFAULT_VERSION = regex.VERSION1
или использовать версию 1 в одном выражении:
pattern = re.compile(r'(?V1)[\W_--[ ]]+')
Я собираюсь догадаться, что «игнорирование пропущенных значений» означает «трактовать их как нули». Если у вас есть другая идея, вы должны сделать это явно.
Это может быть
gen new_var = (cond(missing(X), 0, 3 * X) ///
+ cond(missing(Y), 0, 2 * Y) ///
+ cond(missing(Z), 0, 4 * Z)) / 7
Давайте посмотрим на ваши решения и объясним, почему они все не правы в целом или обычно.
(cond(missing(X*3),., X) + cond(missing(Y*2),., Y))/7
Достаточно отметить, что если верно, что X
отсутствует, то cond()
приводит к отсутствию, как тогда X * 3
также отсутствует. Такое же замечание относится к терминам, включающим Y
и Z
. Таким образом, вы заменяете все пропущенные значения пропущенными значениями, а это не усиление
!missing(X*3+Y*2+Z*4)/7
Учитывая информацию, что по крайней мере один из X Y Z
всегда отсутствует, тогда это всегда оценивается как 0/7 или 0. Даже если бы X Y Z
были все не пропущены, тогда он оценил бы до 1/7. Это далеко от суммы, которую вы хотите. missing()
всегда дает 1 или 0, а его отрицание, таким образом, 0 или 1.
(max(X, Y, Z)/7) if missing(X , Y, Z)
Максимум X
, Y
, Z
будет правильным ответом, если и только если один из значений не пропущены, а два других отсутствуют. max()
в максимально возможной степени игнорирует пропуски (хотя в других контекстах пропуски рассматриваются как произвольно большие положительные числа). [+1121]