1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的模式包含(.)
匹配并捕獲除換行符以外的任何單個(gè)字符。您想要的是匹配除 之外的任何字符:
,因此您需要使用[^:]+
.
如果只有一部分正則表達(dá)式發(fā)生更改,則不需要編譯單獨(dú)的正則表達(dá)式對(duì)象。您可以在讀取文件之前動(dòng)態(tài)構(gòu)建正則表達(dá)式 abd 編譯一次。例如,您有122
,194
和945
值在:...:[^:]+:
模式中使用代替...
,那么您可以使用
vals = ["122", "194", "945"]
r = re.compile(r':(?:{}):[^:]+:'.format("|".join(vals)))
# Or, using f-strings
# r = re.compile(rf':(?:{"|".join(vals)}):[^:]+:')
正則表達(dá)式將如下所示 :(?:122|194|945):[^:]+:
:
:
- 一個(gè)冒號(hào)(?:122|194|945)
-非捕獲組匹配122
,194
或945
:
- 一個(gè)冒號(hào)[^:]+
- 1+ 字符而不是 a:
:
- 一個(gè)冒號(hào)
然后使用
with open (sys.argv[1], 'r') as f: for line in f: print(r.sub('', line))
添加回答
舉報(bào)