【问题标题】:How to remove a string between two words without removing those words?如何删除两个单词之间的字符串而不删除这些单词?
【发布时间】:2021-12-11 16:18:18
【问题描述】:

我想用 Python 从字符串中删除两个单词之间的子字符串,而不删除分隔该子字符串的单词。

我的输入:“abcde” 我想要的输出:“abde”

我的代码:

import re

s = "abcde"
a = re.sub(r'b.*?d', "", s)

我得到的输出:“ae”

------------编辑:

另一个例子来解释这个案例:

我输入的内容:“c:/user/home/56_image.jpg” 我想要的输出:“c:/user/home/image.jpg”

我的代码:

import re

s = "c:/user/home/56_image.jpg"
a = re.sub(r'/.*?image', "", s)

我得到的输出:“c:/user/home.jpg”

/!\“图像”之前的数字正在改变,所以我不能使用 replace() 函数我想使用通用的东西

【问题讨论】:

  • b使用lookbehind,对d使用lookahead(不知道如何在python中做到这一点......)
  • 像这样:r'(?<=b).*?(?=d)
  • 你的标题有点混乱,因为你并没有真正处理文字。根据您的实际示例,您只想删除一个字母,并且可以很容易地做到:s.replace('c', '')
  • Temrikoo 这只是一个例子,我会调整它,谢谢你的回答,这就是我正在寻找的表达方式
  • 在添加的示例中,您也可以使用s.replace('56_', '')

标签: python regex


【解决方案1】:

你可以这样做:

''.join('abcde'.split('c'))

【讨论】:

  • 这基本上是一种花哨的说法s.replace('c', '')
【解决方案2】:

我会将正则表达式替换为:

s = "abcde"
a = re.sub(r'b\w*d', "bd", s)
print(a)  # abde

我正在使用\w* 匹配bd 之间的零个或多个单词字符。这是为了确保我们不会意外匹配单词。

【讨论】:

    【解决方案3】:

    您也将要保留的内容与空字符串匹配,这就是您在替换中看不到它的原因。

    您可以使用捕获组并在替换中使用该组,或者使用非消耗性的环视。

    例如,在替换中使用\1 使用组1:

    (b)\w*?(?=d)
    

    Regex demo

    或者使用环视,并在替换中使用空字符串。

    \d+_(?=image)
    

    Regex demo

    【讨论】: