#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. Спасибо за ваше решение, я даю вам ответ на решение из-за предоставленной ссылки. Регулярное выражение — это проблема, которую мне трудно понять, и эта ссылка очень полезна.