无论逗号位置如何,都替换字符串的所有变体 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"
参数视为正则表达式
我有一个由多行组成的数据框,其中包含以逗号分隔的字符串的不同变体。而不是不断编写此代码的变体,例如 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"
参数视为正则表达式