向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? 我需要迭代一个列表还是正则表达式能够做到这一点?
答案 0 :(得分:2)
要从X
删除文本,直到第一次出现C
,然后删除第一次出现B
或Y
或A
的任何文字(将它们保存在结果字符串中),您可以使用
X.*?C.*?(B|Y|A)
并替换为\1
反向引用。请参阅regex demo。要跨行匹配,请使用re.DOTALL
标记使.
匹配换行符。
<强>详情:
X
- 匹配X
.*?
- 懒惰地匹配任何0 +字符尽可能少到第一个... C
- C
.*?
- 懒惰地匹配任何0 +字符尽可能少到第一个... (B|Y|A)
- (第1组)B
,Y
或A
。 \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))