質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

3072閲覧

正規表現で文字列抽出(ログの文字列)

Villager

総合スコア12

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/01/14 11:25

ログで以下のような出力があって、
Service:と(FINAL_REJECT:)の間の部分のみを正規表現で抽出したいと考えています。

##ログ

Service: telnet (tcp/23) (FINAL_REJECT:) - 1 packet Service: d2k-tapestry2 (tcp/3394) (FINAL_REJECT:) - 1 packet 以下同じようなものが続く

##抽出したい部分

telnet (tcp/23) d2k-tapestry2 (tcp/3394) ...

どうすればいいんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2018/01/14 11:35

OSや使用可能なプログラミング言語の情報を書いてください。
Villager

2018/01/14 13:15

申し訳ありません。 OSはMacOSXでPython3.6を使用しています。
guest

回答2

0

ベストアンサー

そのまま、/Service: (.*) (FINAL_REJECT:)/とマッチすれば、取り出せます。
そこから以降は、正規表現の話じゃなくて、それぞれのプログラミング言語の話になりますが、多くの言語では、括弧内の文字列を\1とか$1で参照できます。

投稿2018/01/14 11:41

otn

総合スコア84542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jun68ykt

2018/01/14 11:43

それでいけますね。難しく考えすぎました・・・
guest

0

こんにちは。

Service:\s+([a-z0-9-]+\s+([^)]+))

でキャプチャできると思います。
以下は ruby によるサンプルです。

ruby

1logs = <<EOS 2Service: telnet (tcp/23) (FINAL_REJECT:) - 1 packet 3Service: d2k-tapestry2 (tcp/3394) (FINAL_REJECT:) - 1 packet 4EOS 5 6logs.each_line do |line| 7 if /Service:\s+([a-z0-9-]+\s+([^)]+))/ =~ line 8 puts $1 9 end 10end

上記を実行すると、以下のように出力されます。

telnet (tcp/23)

d2k-tapestry2 (tcp/3394)

参考になれば幸いです。


追記

正規表現を使うというお題なので、わき道にそれて恐縮ですが、
もしお使いの環境がUNIX系OSでしたら、
cut というコマンドを使うと、正規表現を使わず、プログラムも書かず、
一行のコマンドで出来ます。

以下のログがテキストファイル、logs.txt に入っているとします。

Service: telnet (tcp/23) (FINAL_REJECT:) - 1 packet Service: d2k-tapestry2 (tcp/3394) (FINAL_REJECT:) - 1 packet

各行の文字列の区切りは、半角スペースであるとしますと、
以下のように cut を使えば結果が得られます。

$ cut -f 2,3 -d ' ' logs.txt telnet (tcp/23) d2k-tapestry2 (tcp/3394)

投稿2018/01/14 11:41

編集2018/01/14 12:07
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Villager

2018/01/14 13:08

詳しい説明ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問