2016-12-30 2 views
1

ich prüfen versuche, wenn der Eingang in dieses Muster: MH12Wie richtig diese regex überprüfen Python mit

zwei Ziffern Ab dem nächsten zwei Ziffern zu sein MH dann eine beliebige Zahl und die vollständige Zeichenfolge sollte nur 4 Ziffern sein. so müde mit regex = r'^[MH]\d{2}.{,4}$'

import re

def checkingInput(): 
    while True: 
     try: 
      inp = raw_input() 
      if re.match(r'[MH]\d{2}', inp): 
       print "Thanks for your Input:",inp 
       break 
      else: 
       print('Invalid office code, please enter again :') 
     except ValueError: 
       print('Value error! Please try again!') 


checkingInput() 

aber dem obigen Programm auch für Eingang = MH12 es zeigt es ungültig Amt Code. Warum?

Kann mir etwas fehlen?

+1

sollte r'MH \ d {2} sein' – e4c5

+0

ich denke, es sollte 'wenn re.match sein (r'MH \ d {2} $ ', inp): ', oder benutze' re.fullmatch' mit 'r'MH \ d {2}' in Python 3.4+. –

+0

@ e4c5 Yeah Vielen Dank! –

Antwort

4

Das Muster [MH] entspricht genau einem Buchstaben: entweder ein Moder ein H.

Sie sollten stattdessen MH verwenden.

Der gesamte Regex ist MH\d\d; in Python-Syntax wäre das r'MH\d\d'.

+0

Vielen Dank –

1

Wie Sie verwenden MH als Teil der Zeichenfolge übereinstimmen sind versuchen, müssen Sie die [] Klasse von Ihrem Ausdruck ausschließen, so dass die gültige ist

import re 

def checkingInput(): 
    while True: 
     try: 
      inp = raw_input() 
      if re.match(r'MH\d{2}', inp): 
       print inp 
      else: 
       print('Invalid office code, please enter again :') 
     except ValueError: 
       print('Value error! Please try again!') 


checkingInput() 
1

versuchen es:

re.findall (r'MH \ d {2} 's)