python用正则表达式替换模式

我有这个字符串。


a='SAD; Happy; ING:train coca'

OR

a='SAD; Happy; ING(train coca'

OR

a='SAD, Happy, ING[train coca'

我需要检测这个字符串:“; ING:”为此我使用了这个正则表达式:


listRE=re.findall(r';\s*[A-Z]+\s*[\:|\[|\(]\s*[A-Z]+', a)

我需要做的是删除介于两者之间的内容;和 :(并不总是 ; : 如正则表达式所示)


我这样做


for i in listRE:

   p=re.compile(i)

   a=re.sub(p, r'', a)

但它正在删除我的文字!我的目标是:


a='SAD; Happy; train coca'

非常欢迎您的帮助 谢谢您的帮助


婷婷同学_
浏览 182回答 3
3回答

子衿沉夜

这是做的工作:import restrs = [&nbsp; &nbsp; 'SAD; Happy; ING:train coca',&nbsp; &nbsp; 'SAD; Happy; ING(train coca',&nbsp; &nbsp; 'SAD, Happy, ING[train coca',]for str in strs:&nbsp; &nbsp; x = re.sub(r'(?<=[;,])\s+[A-Z]+[:([]', ' ', str)&nbsp; &nbsp; print x输出:SAD; Happy; train cocaSAD; Happy; train cocaSAD, Happy, train coca演示与解释

RISEBY

您不需要使用findall——您可以直接使用匹配您需要的所有情况的正则表达式模式。我还修复了一些你的正则表达式:import rea = 'SAD; Happy; ING:train coca'b = "SAD; Happy; ING(train coca"c = "SAD, Happy, ING[train coca"print(re.sub(r'(?<=;|,)(\s*)[^:[(;,]*[:[(]', r'\1', a))print(re.sub(r"(?<=;|,)(\s*)[^:[(;,]*[:[(]", r"\1", b))print(re.sub(r"(?<=;|,)(\s*)[^:[(;,]*[:[(]", r"\1", c))"""output:SAD; Happy; train cocaSAD; Happy; train cocaSAD, Happy, train coca"""

海绵宝宝撒

如果您还想匹配评论中的字符串,您可以使用\s+\w+\s?[:([]\s*在替换中使用空格。正则表达式演示|&nbsp;Python演示如果您可以匹配冒号或从开始到结束的括号,您可以使用交替匹配或者:使用 2 捕获组,您将匹配内容以保留在括号[...]之间(...)\s+\w+\s?(?::|\(\s*([^()]+)\s*\)|\[\s*([^]\[]+)\s*])\s*在替换中使用空格和两个捕获组r' \1\2'正则表达式演示|&nbsp;Python演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python