2016-08-31 3 views
2

Ich brauche Dinge anzupassen, dass Format etwas entlang der Linien von 657432-76, 54678-01, 54364 A -12Regular Expression mit dem Buchstaben

Ich habe (r'^\d{6}-\d{2}$') und (r'^\d{5}-\d{2}$') aber wie man bekommt der Buchstabe?

danke !!

+0

Kombinieren Sie sie mit '^ \ d {5,6} - \ d {2} $' Mit dem optionalen Brief seine '^ \ d {5 , 6} [AZ]? - \ d {2} $ ' – sln

+0

Versuchen Sie ['^\ d {5} (?: \ D? | [AZ]) - \ d {2} $ '] (https: // regex101.com/r/gE4cM8/1). Hängt davon ab, was du eigentlich meinst. Ein anderes - '^ \ d {5} \ w? - \ d {2} $' –

+0

@DavideVisentin: [es tut] (https://regex101.com/r/gE4cM8/2) –

Antwort

0

Wenn Sie eine einzelne Regex das dritte Muster passen Sie einen regulären Ausdruck wie folgt verwenden können:

(?i)(r'^\d{5}[a-z]-\d{2}$') 

Working demo

Wenn Sie jedoch eine einzelne Regex für alle haben wollen sie könnten für Sie nützlich:

(?i)(r'^\d{5-6}[a-z]?-\d{2}$') 

beachten Sie, dass dies ermöglicht: 657432A-76 aber wenn Sie jus t wollen 5 Ziffern nur mit dem Buchstaben, dann könnten Sie verwenden:

(?i)(r'^\d{5}(?:\d?|[a-z])-\d{2}$') 
0

für die Buchstaben [a-zA-Z] verwenden, und wenn es nur oberer Fall ist, dann [A-Z] ausreichend.

0

es scheint das Muster generisch ist 6 Zeichen mit möglichen Buchstaben oder Zahlen zuletzt char max dann dann 2 Zahlen? so dann würden Sie dieses Muster verwenden

pattern = r'^d{5}.+-\d{2}$'

0

Wie dieser Ausdruck:

>>> re.search(r'^\d+[A-Z]?-\d+$','657432A-76') 
<_sre.SRE_Match object; span=(0, 10), match='657432A-76'> 
>>> 
>>> re.search(r'^\d+[A-Z]?-\d+$','657432-76') 
<_sre.SRE_Match object; span=(0, 9), match='657432-76'> 
>>> 
>>> re.search(r'^\d+[A-Z]?-\d+$','65743-76') 
<_sre.SRE_Match object; span=(0, 8), match='65743-76'> 
>>> 

Oder wenn das Format ist wie:

[At most six digits][Possibility of a letter][-][At most two digits]

Dann:

>>> re.search(r'^\d{,6}[A-Z]?-\d{,2}$','65743A-76') 
<_sre.SRE_Match object; span=(0, 9), match='65743A-76'> 
>>> 
>>> re.search(r'^\d{,6}[A-Z]?-\d{,2}$','657436-76') 
<_sre.SRE_Match object; span=(0, 9), match='657436-76'> 
0

Hier ist ein möglicher Kandidat alle Proben passend:

import re 

samples = [ 
    "657432-76", 
    "54678-01", 
    "54364A-12" 
] 

for s in samples: 
    print re.match(r'^(\d+[A-Z]?)-(\d+)$', s).groups()