为了账号安全,请及时绑定邮箱和手机立即绑定

python用正则表达式替换模式

python用正则表达式替换模式

婷婷同学_ 2023-05-23 14:32:41
我有这个字符串。a='SAD; Happy; ING:train coca'ORa='SAD; Happy; ING(train coca'ORa='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'非常欢迎您的帮助 谢谢您的帮助
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这是做的工作:


import re


strs = [

    'SAD; Happy; ING:train coca',

    'SAD; Happy; ING(train coca',

    'SAD, Happy, ING[train coca',

]

for str in strs:

    x = re.sub(r'(?<=[;,])\s+[A-Z]+[:([]', ' ', str)

    print x

输出:


SAD; Happy; train coca

SAD; Happy; train coca

SAD, Happy, train coca

演示与解释


查看完整回答
反对 回复 2023-05-23
?
RISEBY

TA贡献1856条经验 获得超5个赞

您不需要使用findall——您可以直接使用匹配您需要的所有情况的正则表达式模式。我还修复了一些你的正则表达式:


import re

a = '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 coca

SAD; Happy; train coca

SAD, Happy, train coca

"""


查看完整回答
反对 回复 2023-05-23
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

如果您还想匹配评论中的字符串,您可以使用

\s+\w+\s?[:([]\s*

在替换中使用空格。

正则表达式演示Python演示


如果您可以匹配冒号或从开始到结束的括号,您可以使用交替匹配或者:使用 2 捕获组,您将匹配内容以保留在括号[...]之间(...)

\s+\w+\s?(?::|\(\s*([^()]+)\s*\)|\[\s*([^]\[]+)\s*])\s*

在替换中使用空格和两个捕获组r' \1\2'

正则表达式演示Python演示


查看完整回答
反对 回复 2023-05-23
  • 3 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信