3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
這是做的工作:
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

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
您不需要使用findall——您可以直接使用匹配您需要的所有情況的正則表達(dá)式模式。我還修復(fù)了一些你的正則表達(dá)式:
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
"""

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您還想匹配評(píng)論中的字符串,您可以使用
\s+\w+\s?[:([]\s*
在替換中使用空格。
如果您可以匹配冒號(hào)或從開始到結(jié)束的括號(hào),您可以使用交替匹配或者:
使用 2 捕獲組,您將匹配內(nèi)容以保留在括號(hào)[...]
之間(...)
\s+\w+\s?(?::|\(\s*([^()]+)\s*\)|\[\s*([^]\[]+)\s*])\s*
在替換中使用空格和兩個(gè)捕獲組r' \1\2'
添加回答
舉報(bào)