2017-05-29 13 views
1

私は4行の複数行のマッチを行おうとしています。私のコードは最初のコードを見つけます。しかし、他のものはありません。ここpython regex matchすべて

パターンである:ここ

pattern = re.compile("([a-z]+\.com\.|net\.)[.\s\S]+(Z[A-Z0-9]+)") 

は、被写体である:ここ

sub = """yahoo.com. 
Public 
8 
Z2RVE9XGX4PFJN 
google.com. 
Public 
7 
Z2VATLWTLBDR5D 
""" 

は完全なコードである:ここ

import re 
pattern = re.compile("([a-z]+\.com\.|net\.)[.\s\S]+(Z[A-Z0-9]+)") 

sub = """yahoo.com. 
Public 
8 
Z2RVE9JJGX4PFJN 
google.com. 
Public 
7 
Z2VATZOPLBDR5D 
""" 

m = pattern.findall(sub) 

print(m) 

結果である:

[('yahoo.com.', 'Z2RVE9JJGX4PFJN')] 
[('yahoo.com.', 'Z2RVE9JJGX4PFJN'), ('google.com', Z2VATZOPLBDR5D')] 

ありがとう:

そして最後には、ここでは望ましい結果です。

答えて

0

あなたは近くです。ちょうどあなたのマッチが少ない貪欲ます

import re 
pattern = re.compile("([a-z]+\.com\.|net\.)[\s\S]+?(Z[A-Z0-9]+)") 
# Note the 'less greedy' addition    ^
# The '.' is not necessary in the   ^in the character class 
sub = """yahoo.com. 
Public 
8 
Z2RVE9JJGX4PFJN 
google.com. 
Public 
7 
Z2VATZOPLBDR5D 
""" 

m = pattern.findall(sub) 

print(m) 

プリント:あなたのパターンの両端に高い特異性のために

[('yahoo.com.', 'Z2RVE9JJGX4PFJN'), ('google.com.', 'Z2VATZOPLBDR5D')] 

を、あなたはアンカーを使用することもできます。

pattern = re.compile("^([a-z]+\.com\.|net\.)$[\s\S]+?^(Z[A-Z0-9]+)$", re.M) 
# Start of line  ^       ^
# End of line        ^     ^
# Multi line flag              ^
+0

ありがとうございました!完璧に動作します。私はそれが正しいとマークしたいと思いました。 –

+0

私は戻って少し勉強しました。補足として、私は正規の正規表現スキルを持つ他の人に間違っていたと思うところを指摘したいと思います。ここでは "[。\ s \ S]"です。私は信じている "。"最後になるまで貪欲な形ですべてにマッチしたという点で(Z [A-Z0-9] +)、問題のインポート部分でした。もう一度ありがとう、Dawg。 –

+0

'[\ s \ S]'部分は '\ n'を含む任意の文字にマッチします。それは次の試合に向けて直ちに実行されます。あなたが何かの終わりまでずっと走りたいのでなければ、 '?'なしでまれにしか使われません。 – dawg