2016-05-02 5 views
2

に一致した後、私はOのためのマッチングと使用して完全なラインを印刷しています。この文字列から文字列は、文字列

output = '''Gateway of last resort is not set 

     10.0.1.0/8 is variably subnetted, 4 subnets, 2 masks 
C  10.1.0.0/24 is directly connected, Ethernet1/0 
L  10.1.0.1/32 is directly connected, Ethernet0/0 
C  10.2.0.0/24 is directly connected, Ethernet0/1 
L  19.18.2.1/32 is directly connected, Serial2/1 
O  19.18.3.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1 
        [110/128] via 19.18.1.2, 00:00:50, Serial1/0 

O  12.18.3.1/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1 
        [110/128] via 19.18.1.2, 00:00:50, Serial1/0 

O  12.18.1.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial0/1 
        [110/128] via 19.18.1.2, 00:00:50, Serial0/0''' 

を持っても、次の行を印刷したいです

['19.18.3.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1', '12.18.3.1/20 [110/128] via 19.18.2.2, 00:00:50, Serial1/1', '12.18.1.0/20 [110/128] via 19.18.2.2, 00:00:50, Serial0/1'] 

しかし、これらの行も上記の出力とともに印刷したいと思います。

[110/128] via 19.18.1.2, 00:00:50, Serial1/0, [110/128] via 19.18.1.2, 00:00:50, Serial1/0, [110/128] via 19.18.1.2, 00:00:50, Serial0/0 

答えて

1

あなたは、パターンの後にスペースで始まるオプション行に一致することを選ぶことができます。

O\s+(?P<O>\d+\.\d+\.\d+\.\d+.*(?:[\r\n]+[^\S\r\n]+.*)?) 
           ^^^^^^^^^^^^^^^^^^^^^^^^  

を参照してくださいthis regex demo

更新パターンの詳細:(?:[\r\n]+[^\S\r\n]+.*)?は任意の非キャプチャグループである((?:...)? 1または0の出現に一致する)

  • [\r\n]+ - 一つ以上のCR/LFシンボル(にのみ(?:\r?\n|\r|\n)を使用したものと一致)
  • [^\S\r\n]+ - 非空白とCR /のLF(従って、それは水平空白と一致以外の1以上のシンボルのみ
  • .* - 残りの行(.はデフォルトでDOTALLモードなしの改行と一致しません)。

また、私は、IPアドレス内のリテラルのドットを一致させる、と数字だけを一致させるために\d\wを置き換えるために.をエスケープ示唆しています。

最初にOが表示される場合は、安全のために先に^を追加してください。

+1

あなたの提案をありがとう、そしてはい、私のためにコマンドが働いた。 –

+0

それはあなたのために働いてうれしい。答えを受け入れることを検討してください([回答を受け入れる方法](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を参照してください)。 ([Stack Overflowについてのアップルのしくみ?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)を参照してください)。 –

2

はこれを試してみてください:

regex = re.findall("(?s)O\s+(?P<O>\w+.\w+.\w+.\w+.*)", output, re.M) 

私はまた、空白を一致させるためにsフラグを追加するための(?s)を追加します。

+1

ありがとうございます。@ aminah –

+1

[この解決法は個々の入力と一致しません](https://regex101.com/r/nE4yC9/1)。 –