使用具有特定条件的正则表达式替换单词

时间:2018-01-10 23:55:41

标签: python regex

我如何使用python" re"模块用一个空字符串替换一个单词,即'co',即给定文本中的'',仅在以下情况下:

  • 这个词位于文本的末尾,并且在单词
  • 之前有一个空格
  • 这个词不是文本中的最后一个单词,但是开头有一个空格,然后是单词末尾的另一个空格

即,

# word is not the final word in the text but there's a space at beginning, and then another space at the end of the word
txt = 'A co is mine'
txt_after_replace = 'A is mine'
txt = 'A column is mine'
txt_ater_replace = 'A column is mine'
# word is the end of the text and there's a space before the word
txt = 'my co'
txt_after_replace = 'my'
txt = 'my column'
txt_after_replace = 'my column'

如果我这样做:txt.replace(' co', '')这两种情况将失败:txt = 'my column', txt_ater_replace = 'A column is mine'。因为它不会在单词之后检查文本结尾,也不会检查文本后面文本中的空格。

我认为re.sub模块会在这里解决,但我不确定如何。

这适用于任何一般词,即在这种情况下为'co'

2 个答案:

答案 0 :(得分:1)

您可以使用alternation使用以下正则表达式匹配这两个条件。

正则表达式: (?:\sco\s|\sco$)

<强>解释

  • \sco\s匹配前面的co并以空格成功。

  • \sco$匹配co,最后是空格。

<强> Regex101 Demo

在python中:

import re
str = "coworker in my company are not so co operative. silly co"
res = re.sub(r'(?:\sco\s|\sco$)', ' ', str)
print(res)

结果: coworker in my company are not so operative. silly

Ideone Demo

答案 1 :(得分:0)

您可以使用lookahead正则表达式

\sco(?=$|\s)

说明:

  • space跟随co,然后断言co后面的内容必须是 spaceend of text

python代码

import re
txt = 'A co is mine, A column is mine, my column, my co'
new_txt = re.sub('\sco(?=$|\s)', '', txt)
# 'A is mine, A column is mine, my column, my'