2017-12-09 9 views
0

Regexマルチグループパターンを使って行から別のCPU仕様を抽出しようとしていますが、空リストを取得しようとしています。個別のグループを個別に試してみると、対応する値。ここでマルチグループパターンを使うべきですか?助けてください!Python Regexマルチグループパターンfindall()空リストを返す

import re 

line = "R7000 CPU at 160MHz, Implementation 39, Rev 2.1, 256KB L2, 512KB L3 Cache" 

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz)(?P<L2>\s+\w+\s+L2)(?P<L3>\s+\w+\s+L3)" 
pat_cpu_freq = r"(?P<freq>\s+\w+Hz)" 
pat_cpu_l2 = r"(?P<L2>\s+\w+\s+L2)" 
pat_cpu_l3 = r"(?P<L3>\s+\w+\s+L3)" 

# empty list coming when pat_cpu_values_combined is searched 

print re.findall(pat_cpu_values_combined, line) 

# below individual group pattern findall are working fine 

print re.findall(pat_cpu_freq, line) 
print re.findall(pat_cpu_l2, line) 
print re.findall(pat_cpu_l3, line) 

答えて

1

あなたの結合された正規表現は、中間パターンなしで一緒に壊れたパターンを探しています。代わりに、パターンを|セパレータと組み合わせることができます。あなたがそれらを組み合わせると

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz)|(?P<L2>\s+\w+\s+L2)|(?P<L3>\s+\w+\s+L3)" 

[''.join(g) for g in re.findall(pat_cpu_values_combined, line)] 
# returns: 
[' 160MHz', ' 256KB L2', ' 512KB L3'] 
+0

どうもありがとう:あなたはこの順序で3つのすべてを検索したい場合は

、のようなものを使用!ソリューションは魅力のように機能します! – nAQ

+0

問題ありません。質問に回答したことを覚えておいてください。 – James

0

、あなたが合うようにしたいものの間で文字を占めていません。あなたの組み合わせ正規表現のためにこれを使用してみてください:

(?P<freq>\s+\w+Hz).*?(?P<L2>\s+\w+\s+L2).*?(?P<L3>\s+\w+\s+L3) 
+0

これは私にとってはうまくいかず、このパターンでも空リストを取得しています。 – nAQ

0

pat_cpu_values_combinedはあなたの3つの個別のパターンにマッチする文字列がそれらの間に何もないで発生することが期待しています。

pat_cpu_values_combined = r"(?P<freq>\s+\w+Hz).*?(?P<L2>\s+\w+\s+L2).*?(?P<L3>\s+\w+\s+L3)" 
関連する問題