1

行の形式が異なるログファイルからデータを取得しようとしていますが、重要な情報が に含まれていることが保証されています[]。たとえば、次のようになります。

[User] has [do something] on [system] at [time]

また

[system] encounters [exception] at [time]

可能であれば、各ログ行内のすべての情報を取得する単一の正規表現を書きたいと思います。つまり、正規表現は同じ行の多くの結果に一致する必要があります。例えば:

  • [Admin] has [logged out] on [admin page] at [Monday 20 May, 11:00] 戻りますAdmin, logged out, admin page, Monday 20 May, 11:00
  • [Order page] encounters [NullPointerException] at [Monday 20 May,
    11:00]
    戻りますOrderPage, NullPointerException, Monday 20 May, 11:00

私はpythonに取り組んでいますが、他の言語または純粋な正規表現での回答は問題ありません。ありがとう

4

2 に答える 2

3
>>> import re
>>> text = "[Admin] has [logged out] on [admin page] at [Monday 20 May, 11:00]"
>>> re.findall(r'\[([^\]]*)\]', text)
['Admin', 'logged out', 'admin page', 'Monday 20 May, 11:00']

詳細:

>>> text = "[Order page] encounters [NullPointerException] at [Monday 20 May, 11:00]"
>>> re.findall(r'''\[            # a literal [ character (needs backslash escape)
                     (           # save following group
                       [^\]]     # match any character except literal ]
                       *         # match as many as possible of these
                     )           # end group
                    \]           # a literal ] character
''', text, flags=re.VERBOSE)
['Order page', 'NullPointerException', 'Monday 20 May, 11:00']
于 2013-05-20T10:08:37.880 に答える
2

または、コンパクトな perl ワンライナーとして。使用したjamylakと同じ正規表現:

perl -pne '$_=join(", ",/\[([^\]]*)\]/g)."\n"'
于 2013-05-20T10:23:27.453 に答える