Python: избавьтесь от знаков препинания с условием - PullRequest
0 голосов
/ 19 ноября 2018

Я могу избавиться от пунктуации в моем фрейме данных с помощью этой строки:

df[column_name].replace(r'[^\s0-9a-zA-Z]+', r'', regex=True, inplace=True)

Однако есть некоторые исключения, которые я хочу сохранить как:

Я не хочу конвертировать 15,00 в 1500. Если в тексте есть запятая, я хочу оставить ее. Есть ли простой способ сделать это. Спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете избежать совпадения запятой между цифрами при использовании шаблона, если добавите (?<!\d,(?=\d)) lookbehind:

r'[^\s0-9a-zA-Z](?<!\d,(?=\d))'
                ^^^^^^^^^^^^^^

См. Демонстрационную версию regex

Короче говоря, [^\s0-9a-zA-Z] соответствует любому символу, кроме пробелов и букв или цифр ASCII.При поиске (?<!\d,(?=\d)) совпадение не выполняется, если непосредственно слева от текущего местоположения есть цифра, ,, и непосредственно справа от , есть цифра.Предварительный просмотр внутри lookbehind необходим для того, чтобы убедиться, что запятая «сопоставлена» в lookbehind только с шаблоном [^\s0-9a-zA-Z].

Кроме того, есть способ выполнить эту проверку перед сопоставлением отрицательного класса символов, если выиспользуйте (?<!\d(?=,\d))[^\s0-9a-zA-Z], см. демо .Однако такой подход намного дороже, так как внешний вид не «привязан» ни к какому тексту или утверждению нулевой ширины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...