#python #regex #pandas
#python #регулярное выражение #панды
Вопрос:
Я новичок в python. Мне нужно сопоставить имена столбцов фрейма данных pandas, который имеет вид : names_(one more additional word)
Но из этого совпадения мне нужно пропустить одно конкретное имя столбца names_info
Предположим, что имена столбцов данных следующие
"names_full" "names_first" "names_last" "names_attribute" "names_info" "address" "pin" "balance"
Мне удается так много писать на python:
colnames.str.contains(r"(names_)")
и он выдает все столбцы с «names_» в начале. Из этого, как пропустить один конкретный случай?
Я новичок в регулярных выражениях, поэтому, пожалуйста, объясните логику, если это возможно
Ответ №1:
Вы могли бы использовать отрицательный прогноз, который утверждает, что определенные термины не следуют после names_
, например
colnames.str.contains(r"names_(?!item$)")
Это будет соответствовать каждому имени столбца, за исключением names_item
(хотя оно будет совпадать names_items
).
Используемый здесь шаблон регулярных выражений говорит о соответствии:
names_ column name starts with "names_"
(?!item$) what immediately follows is NOT "item"
Обратите внимание, что names_items
это допустимо, а также все остальное, за которым item
следует один или несколько символов.
Комментарии:
1. Привет, спасибо. Могу ли я узнать логику для ?,! и $ внутри ‘()’?
2. Позвольте мне добавить кое-что явно к моему ответу.
3. Привет, какова логика этого негативного прогноза?
4. Извините, форматирование было отключено. Проверьте обновленный ответ.
5. так
?! something
переводится какNot
«что-то»?