删除多个字符串之间的内容

时间:2017-01-19 20:12:08

标签: python regex

向String S问好,

s = "X Hello C there. I am B a String. Y I C am a A good string."

我想做什么:

  • 将内容从X移至C.(完成。)

  • 将内容从C移到B或A.(注意C重复两次。)

现在,我可以使用:

将内容从X移到C.
re.sub('X.*?C','', s, flags=re.DOTALL)

如何将C转换为B / Y / A? 我需要迭代一个列表还是正则表达式能够做到这一点?

预期输出:(需要删除这些)

  • “那里。我是一个”(第一个C到B)
  • “am a”(第二个C到A)

1 个答案:

答案 0 :(得分:2)

要从X删除文本,直到第一次出现C,然后删除第一次出现BYA的任何文字(将它们保存在结果字符串中),您可以使用

X.*?C.*?(B|Y|A)

并替换为\1反向引用。请参阅regex demo。要跨行匹配,请使用re.DOTALL标记使.匹配换行符。

<强>详情:

  • X - 匹配X
  • .*? - 懒惰地匹配任何0 +字符尽可能少到第一个...
  • C - C
  • .*? - 懒惰地匹配任何0 +字符尽可能少到第一个...
  • (B|Y|A) - (第1组)BYA

\1反向引用会将值放回到组1中。

Python demo(在使用反向引用定义替换模式时注意原始字符串文字):

import re
rx = r"X.*?C.*?(B|Y|A)"
s = "X Hello C there. I am B a String. Y I C am a A good string."
print(re.sub(rx, r"\1", s))