无论逗号位置如何,都替换字符串的所有变体 Python

Replace all variations of a string regardless of comma position 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'

您可以按照下面的方式进行 输入

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' 和后面的逗号 & space(如果有)的代码

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

代码中发生了什么

Word :将搜索文本 'Word'

(,\s)? :将查找逗号, 后跟 space\s? 将查找并匹配是否可用,如果逗号 & space 不跟随,则只匹配文本 'Word'。所以 ? 在这里非常重要。

| :这与 2 个表达式之一匹配(在您的情况下,第 3 行需要它,其中前面有 space 和逗号)

你可以在这里看到详细的解释Regex Demo

输出

id  text
1   foo, bar
2   
3   foo, bar
4   foo, bar
df.replace(to_replace='Word,|(, )?Word',value='',regex=True)

这样 .replace() 方法将完成所需的工作。

to_replace 是我们的正则表达式条件,它应该是字符串。 'Word,' 将匹配除末尾以外的所有字符串 ", Word".

为了匹配我们提供的结束字符串 "|"(or) 以便我们可以添加新的条件 "(, )?Word"。这里 ? 匹配 0 次或 1 次出现的 ", "(逗号和 1 次 space),因此结束字符串的两个条件以及仅 1 个字符串 "Word" 匹配

Value = '' :显示要替换的内容

regex = True :告诉将 "to_replace" 参数视为正则表达式