繁体   English   中英

python 用正则表达式替换模式

[英]python replace pattern with regex

我有这个字符串。

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'

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

这可以完成工作:

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

Output:

SAD; Happy; train coca
SAD; Happy; train coca
SAD, Happy, train coca

演示和解释

您不需要使用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
"""

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

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

在替换中使用空格。

正则表达式演示| Python 演示


如果您可以匹配冒号或之后从左括号到右括号,则可以使用与:匹配的替代方法或使用 2 个捕获组,在其中匹配要保留在括号[...](...)

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

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

正则表达式演示| Python 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM