2016-04-10 10 views
1

ich einen Text haben, die Sachen wie diese enthält:Verwenden regex Informationen von einem bestimmten Textformat bekommen

(some text) 
libncursesw5-dev:amd64 depends on libc6-dev | libc-dev;(some text) 
libx32ncursesw5 depends on libc6-x32 (>= 2.16);(some text) 
libx32ncurses5-dev depends on libncurses5-dev (= 5.9+20150516-2ubuntu1);(some text) 
libx32ncursesw5-dev depends on libc6-dev-x32;(some text) 
lib32tinfo-dev depends on lib32c-dev;(some text) 

Hier ist ein vollständiges Beispiel auf einer der Sätze:

dpkg: error processing package lib32tinfo5 (--install): 
dependency problems - leaving unconfigured 
dpkg: dependency problems prevent configuration of libncurses5-dev:amd64: 
libncurses5-dev:amd64 depends on libc6-dev | libc-dev; however: 
    Package libc6-dev is not installed. 
    Package libc-dev is not installed. 

Die ganze Der Text ist in mehrere Absätze unterteilt, so wie der obige, jeder Absatz enthält einen dieser Sätze.

Ich würde eine Regex wie mit Re-Bibliothek in Python, die mich so etwas wie dieses mit findall Option geben würde:

('libc6-dev', '', 'libc-dev', '') 
('libc6-x32','2.16') 
('libncurses5-dev','5.9+20150516-2ubuntu1') 
('libc6-dev-x32','') 
('lib32c-dev','') 

In anderen Worten, würde ich Ihre Hilfe, um aus einem solchen Text zu bekommen, ein Tupel, das die Pakete mit ihren Versionen enthält, falls angegeben.

habe ich diese Regex:

(?<=depends on)([a-zA-Z0-9\-]*)(?: \([=> ]*([a-zA-Z0-9-+.]*)(?:\)))?|(?: \|)([a-zA-Z0-9\-]*)(?: \([=> ]*([a-zA-Z0-9-+.]*)(?:\)))?(?=;) 

ich dieses Ergebnis bekam:

('libc6-dev', '', '', '') 
('', '', 'libc-dev', '') 
('libc6-x32', '2.16', '', '') 
('libncurses5-dev', '5.9+20150516-2ubuntu1', '', '') 
('libc6-dev-x32', '', '', '') 
('lib32c-dev', '', '', '') 

Wie Sie für den Satz sehen:

libncursesw5-dev:amd64 depends on libc6-dev | libc-dev; 

ich diese Antwort bekam:

('libc6-dev', '', '', '') 
('', '', 'libc-dev', '') 

Anstatt diese:

('libc6-dev', '', 'libc-dev', '') 

Vielen Dank für Ihre Hilfe.

Antwort

1
#!/usr/bin/python2 
# -*- coding: utf-8 -*- 

import re 

input = """(some text) 
libncursesw5-dev:amd64 depends on libc6-dev | libc-dev;(some text) 
libx32ncursesw5 depends on libc6-x32 (>= 2.16);(some text) 
libx32ncurses5-dev depends on libncurses5-dev (= 5.9+20150516-2ubuntu1);(some text) 
libx32ncursesw5-dev depends on libc6-dev-x32;(some text) 
lib32tinfo-dev depends on lib32c-dev;(some text)""" 

#a = [] 
#m = re.findall("depends on ([^\s;]+)\ \|\ ([^\s;]+)", input) # 1 
#a = a + m 
#m = re.findall("depends on ([^\s;]+)\ \([><=]{,2} ([^;]+)\)", input) # 2, 3 
#a = a + m 
#m = re.findall("depends on ([^\s;]+)", input) # 4, 5 
#a = a + m 

m = re.findall("depends on ([^\s;]+)\ \|\ ([^\s;]+)|depends on ([^\s;]+)\ \([><=]{,2} ([^;]+)\)|depends on ([^\s;]+)", input) 

print m 

Ausgang:

[ 
    ('libc6-dev', 'libc-dev', '', '', ''), 
    ('', '', 'libc6-x32', '2.16', ''), 
    ('', '', 'libncurses5-dev', '5.9+20150516-2ubuntu1', ''), 
    ('', '', '', '', 'libc6-dev-x32'), 
    ('', '', '', '', 'lib32c-dev') 
] 

Sie es eins nach dem anderen bekommen kann oder alle zusammen mit | Ich weiß nicht, ob dies Ihnen helfen kann

Verwandte Themen