Не заменяйте звездочку только в том случае, если ей предшествует указанное c слово в кадре данных - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу написать регулярное выражение, которое не заменяет *, если ему предшествует слово 'pay', иначе заменить * пробелом в столбце данных.

Например, если у меня есть этот кадр данных: pd.DataFrame({'a':['pay * jaf',"df*kafds","*fjas","kf8* 8*jkds"]}), он должен оставить * только в первом ряду, а затем для остальных он должен заменить его пробелом.

Так что если я сделаю df["col"] = df["col"].str.replace(pat, ' '), он должен вернуть pd.DataFrame({'a':['pay * jaf',"df kafds"," fjas","kf8 8 jkds"]})

Я не могу придумать регулярное выражение, которое делает это. В настоящее время у меня есть этот шаблон pay.*(?=\*), но он не работает. Кажется, все должно быть просто, но я новичок в регулярных выражениях. Любая помощь будет оценена.

1 Ответ

1 голос
/ 09 апреля 2020

Вы были довольно близки, в том смысле, что вы поняли, что вам нужен взгляд назад , но у вас есть логика c в противоположном направлении.

Требуется шаблон, соответствующий всем * звездочкам, но с условием, что перед звездочкой не стоит слово pay.

pat = '(?<!pay.*)\*'

Этот шаблон означает "если текущей позиции не предшествует ((?<!) сразу же буквы pay и любое количество символов (.*), затем соответствует звездочке (\*) в текущей позиции ".

Для Для сравнения, ваш шаблон pay.*(?=\*) означает «сопоставить любой pay, за которым следует любое количество символов (.*), с условием, что за сопоставленной областью сразу же ((?=) следует звездочка (\*)».

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