我想用下面的模式提取字符串。Python正則表達式匹配
MsgTrace(65/26)noop:user=xxx=INBOX:cmd=534
正則表達式應該提取空操作
但是當我嘗試follwong模式,它提取字符串「用戶」爲好。
ImapFetchComplete(56/39)user=xxxxxxxxxx
需要輸出的字只包含以下模式。
)somestring: (it should extract the word somestring)
)somestring=xxxx (this shouldn't be extracted)
#!/usr/bin/python
import os
from subprocess import *
import os
import re
dir="/tmp/logs/"
os.chdir(dir)
for filename in os.listdir(dir):
with open(filename) as fp:
for line in fp:
try:
print(re.search(r'\)([a-z]*?):',line).group(1))
except:
pass
它看起來不像正則表達式有問題,請參閱https://regex101.com/r/ImzAyW/1。它不能匹配')somestring = xxxx'中的'somestring',因爲沒有':'。 –
它出了既somestring和somestring =,在這個例子中它輸出noop和用戶= xxxxxxxxxx –
我認爲你的例子是不完整的(因爲它的行爲如預期,但只是偶然)。我認爲你希望你的匹配模式是'r'\)([^:] *?):user =''這樣你就不會撿起其餘的線。我想你可能想要使用're.match()'而不是're.search()',如果你希望匹配在字符串的開始處開始。不過,如果您使用're.match()',則需要再調整一次正則表達式。 – jszakmeister