2016-12-25 10 views
0

ich versuchen Formatierungsstring python3 regex - rePython3 Regex Zeichenfolge Formatierung

Meine Eingang:

{'factorial.2.0.0.zip', 'Microsoft ASP.NET Web API 2.2 Client Libraries 5.2.3.zip', 'Newtonsoft.Json.9.0.1.zip'} 

Ich versuche nur Namen und nur Version für Pakete erhalten, wie folgt aus:

  • faktoriell.2.0.0.zip
    • Fakultät
    • 2.0.0
  • Microsoft ASP.NET Web API 2.2 Client-Bibliotheken 5.2.3.zip
    • Microsoft ASP.NET Web API 2.2 Client-Bibliotheken
    • 5.2.3

usw. Das ist mein Code

if diff is not None: 
    for values in diff.values(): 
     for value in values: 
      temp = '' 
      temp1 = '' 
      temp = re.findall('[aA-zZ]+[0-9]*', value) #name pack 
      temp1 = re.findall('\d+', value) #version 
      print(temp) 
      print(temp1) 

Mein falscher Ausgang:

temp: 
['Microsoft', 'ASP', 'NET', 'Web', 'API', 'Client', 'Libraries', 'zip'] 
['Newtonsoft', 'Json', 'zip'] 
['factorial', 'zip'] 

temp1: 
['2', '0', '0'] 
['2', '2', '5', '2', '3'] 
['9', '0', '1'] 

Rechtser Ausgang:

temp: 
['Microsoft', 'ASP', 'NET', 'Web', 'API', 'Client', 'Libraries'] 
['Newtonsoft', 'Json'] 
['factorial'] 

temp1: 
['2', '0', '0'] 
['5', '2', '3'] 
['9', '0', '1'] 

wie ich Problem beheben, löscht "zip" sind die Suche und zusätzliche Zahlen. Vielleicht habe ich ein anderes Problem gelöst.

+0

Ich würde stark wie Temp loswerden sinnlos Identifikatoren empfehlen, was auch immer Sie sonst ändern. – guidot

Antwort

3

So ähnlich?

import re 

a = {'factorial.2.0.0.zip', 'Newtonsoft.Json.9.0.1.zip',\ 
    'Microsoft ASP.NET Web API 2.2 Client Libraries 5.2.3.zip',\ 
    'namepack010.0.0.153.212583'} 

for b in a: 
    c = re.findall('(.*?).(\d+\.\d+\.\d+)(\.zip|\.\d+)$', b)[0] 
    if c[2] == '.zip': 
     print c[0],'||',c[1] 
    else: 
     print c[0],'||',c[1]+c[2] 

Ausgang:

Newtonsoft.Json || 9.0.1 
namepack010 || 0.0.153.212583 
Microsoft ASP.NET Web API 2.2 Client Libraries || 5.2.3 
factorial || 2.0.0 

Verwenden [aA-zZ] nicht für alle Alphabete auswählen. Es wird auch einige der Sonderzeichen übereinstimmen. Sie sollten [a-zA-Z]

prüfen diese für mehr Verständnis verwenden: Why is this regex allowing a caret?

+0

danke Mann, Sie wirklich helfen, aber ich finde Namen packgs , die diese Regex nicht geeignet ist. Er sieht so aus: 'namepack010.0.0.153.212583' deine Regex-Rückgabe' ('namepack010.0.0.153.', '12583') 'vielleicht kannst du mir wieder helfen? right return this packs: '('namepack010', '0.0.153.212583')' – teror4uks

+0

meine Lösung: 'print (re.findall ('(. *? \ D * \ s *) \. * (\ D * [^a-zA-Z] *). zip ', b) [0]) ' – teror4uks

+1

@ teror4uks Geändert. Jetzt prüfen. – MYGz