Заменить все варианты строки независимо от позиции запятой Python

#python #regex #string #replace #variations

#python #регулярное выражение #строка #заменить

Вопрос:

У меня есть фрейм данных, который состоит из нескольких строк, содержащих разные варианты строки, разделенной запятыми. Вместо того, чтобы постоянно писать варианты этого кода, например df.replace('Word,', '') , я ищу более простой способ замены вариантов строк для python. Я слышал о регулярном выражении, но мне трудно его понять.

Один из таких примеров, который я рассматриваю df.column.str.replace('Word,?', '') , — это замена всех вариантов «Word» независимо от позиции запятой. Однако я не уверен, как это работает. Любая помощь в понимании замены с использованием регулярных выражений была бы весьма признательна. Заранее благодарю вас.

Пример:

 'Word, foo, bar'         
'Word'   
'foo, bar, Word'  
'foo, Word, bar'
  

Желаемый результат:

 'foo, bar'   
''        
'foo, bar'           
'foo, bar'
  

Ответ №1:

 df.replace(to_replace='Word,|(, )?Word',value='',regex=True)
  

Таким образом .replace() , метод выполнит требуемую работу.

to_replace это наш критерий регулярного выражения, и он должен быть в строке. 'Word,' будет соответствовать всем строкам, кроме конца в форме ", Word" .

Чтобы соответствовать той конечной строке, которую мы предоставили "|"(or) , чтобы мы могли добавить новые критерии, которые есть "(, )?Word" . Здесь ? соответствует 0 или 1 вхождению ", " (запятая и 1 пробел), так что совпадают оба условия для окончания строки, а также только 1 строка "Word"

Value = '' : которые показывают, что нужно заменить

regex = True : который сообщает "to_replace" , что параметр должен обрабатываться как выражение регулярного выражения

Ответ №2:

Вы можете сделать это, как показано ниже

 df = pd.DataFrame([[1, 'Word, foo, bar'],
                   [2, 'Word'],
                   [3, 'foo, bar, Word'],
                   [4, 'foo, Word, bar']],columns=['id', 'text'])

id  text
1   Word, foo, bar
2   Word
3   foo, bar, Word
4   foo, Word, bar
  

Код для замены текста «Word» и следующей запятой и пробелом, если таковые имеются

 df['text']=df['text'].replace('Word(,s)|(,s)?Word','',regex=True)
  

Что происходит в коде

Word : будет искать текст «Word»

(,s)? : будет искать запятую , , за которой следует пробел s , ? будет искать и сопоставлять, если она доступна, если запятая и пробел не следуют, тогда сопоставляется только текст «Word». Здесь это ? очень важно.

| : это соответствует одному из 2 выражений (в вашем случае это необходимо для строки 3, где есть предшествующий пробел и запятая)

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

Вывод

 id  text
1   foo, bar
2   
3   foo, bar
4   foo, bar
  

Комментарии:

1. Спасибо за ваше решение, я даю вам ответ на решение из-за предоставленной ссылки. Регулярное выражение — это проблема, которую мне трудно понять, и эта ссылка очень полезна.