簡體   English   中英

為什么Python Regex Wildcard僅匹配newLine

[英]Why is Python Regex Wildcard only matching newLine

我正在編寫一個程序來使用Python RegEx解析日志消息。 我已經把所有東西都放在了日志的消息之前。 這可能是任意數量的字符類型,所以我假設。*通配符符號將是此問題的最佳解決方案。 它匹配除新行之外的所有內容。

但是,當我使用通配符時,唯一返回的是此實例中的新行。 有任何想法嗎? 這是代碼和輸出:

import os
import re
#Change to and print correct file path
os.chdir('/Users/MacUser/Desktop/regExPython')
print(os.getcwd())

#Iterate and read from syslogexample.txt then print results
line_number = 0
with open('syslogexample.txt', 'r') as syslog:
    log_lines = syslog.readlines()
    for line in log_lines:
        line_number += 1
        print('{:>4} {}'.format(line_number, line.rstrip()))


#Build regex to parse through the data
DATE_RE = r'(\w{3}\s+\d{2})'
TIME_RE = r'(\d{2}:\d{2}:\d{2})'
DEVICE_RE = r'(\S+)'
PROCESS_RE = r'(\S+\s+\S+:)'
MESSAGE_RE = r'(.*)'
CD_RE = r'(\s+)'

Syslog_RE = DATE_RE + CD_RE + \
            TIME_RE + CD_RE + \
            DEVICE_RE + CD_RE + \
            PROCESS_RE + CD_RE + \
            MESSAGE_RE

#Use regex to parse through the data
for line in log_lines:
    m = re.match(Syslog_RE, line)
    if m:
        print(m.groups())

#Printed log Files
      1 apr 29 08:22:13 mac-users-macbook-8 syslogd[49]: asl sender statistics
   2 apr 29 08:22:17 mac-users-macbook-8 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system):
   3 service "com.apple.emond.aslmanager" tried to hijack endpoint "com.apple.aslmanager" from owner:
   4 com.apple.aslmanager
   5 apr 29 08:22:17 mac-users-macbook-8 com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system):
   6 service "com.apple.emond.aslmanager" tried to hijack endpoint
   7 "com.apple.activity_tracing.cache-delete" from owner: com.apple.aslmanager
   8 apr 29 08:22:17 mac-users-macbook-8 com.apple.xpc.launchd[1] (com.apple.bsd.dirhelper[14184]):
   9 endpoint has been activated through legacy launch(3) apis. please switch to xpc or
  10 bootstrap_check_in(): com.apple.bsd.dirhelper
  11 apr 29 08:22:19 mac-users-macbook-8 com.apple.xpc.launchd[1]
  12 (com.apple.imfoundation.imremoteurlconnectionagent): unknown key for integer:
  13 _dirtyjetsammemorylimit

Parsed Log Files
('apr 29', ' ', '08:22:17', ' ', 'mac-users-macbook-8', ' ', 'com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system):', '\n', '')
('apr 29', ' ', '08:22:17', ' ', 'mac-users-macbook-8', ' ', 'com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system):', '\n', '')
('apr 29', ' ', '08:22:17', ' ', 'mac-users-macbook-8', ' ', 'com.apple.xpc.launchd[1] (com.apple.bsd.dirhelper[14184]):', '\n', '')

Process finished with exit code 0

正如你所看到的那樣,MESSAGE_RE是唯一打印的字符是\\ n換行符,我認為根本不打印。

謝謝大家!

http://www.regex101.com中 ,正則表達式無法正常工作,因為.*僅捕獲直到換行符,意味着在第3行到第4行的換行符中它停止匹配。 也許嘗試re.compile()並在re.match()之前編譯正則表達式。 在python regex模塊中有DOTALL標志啟用. 匹配換行符也是http://docs.python.org/2/library/re.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM