2015-10-08 13 views
-5
address = input("Please input the drivers home address (e.g. EH129DN): ") 
addresspattern = "[A-Z][A-Z]/d/d/s/d[A-Z][A-Z]" 
match = re.search(address, addresspattern) 
if match: 
    Continue = input ("Do you wish to continue? (Y/N): ") 

Я не знаю, почему это не работает, но это определенно регулярное выражение.Как исправить эту проблему с регулярным выражением в моей программе?

+0

Какая ошибка? –

+0

* «Я не знаю, почему это не работает» * - потому что это неправильный синтаксис регулярных выражений? Шаблон должен быть необработанной строкой ('r" "'), с * обратной косой чертой * для специальных символов. На данный момент ваш шаблон будет соответствовать, например, '" AA/d/d/s/dAA "' ... – jonrsharpe

+0

Это не сработало, я просто попробовал. –

ответ

0

Try:

address = input("Please input the drivers home address (e.g. EH129DN): ") 
addresspattern = r"[A-Z]{2}\d{3}[A-Z]{2}" 
match = re.search(addresspattern, address) 
if match: 
    Continue = input ("Do you wish to continue? (Y/N): ") 

для re.search шаблона является первым аргументом.
EH129DN не включает в себя пространство для белых, следовательно, нет необходимости \s

+0

Это будет работать, но обратите внимание, что по-прежнему существует множество действительных почтовых индексов Великобритании, которые он не будет соответствовать. Также полезно объяснить все, что вы изменили, вместо того, чтобы просто указывать OP на «Try» * it. – jonrsharpe

1

Чтобы вы начали, вы можете перестроить его следующим образом:

ask = 'y' 

while ask == 'y': 
    address = raw_input("Please input the drivers home address (e.g. EH129DN): ") 
    addresspattern = r"[A-Z][A-Z]\d\d\s?\d[A-Z][A-Z]" 
    match = re.search(addresspattern, address) 

    if match: 
     print "Valid" 
    else: 
     print "Invalid" 

    ask = raw_input("Do you wish to continue? (Y/N): ").lower() 

Давать вам следующий вид продукции:

Please input the drivers home address (e.g. EH129DN): EH12 9DN 
Valid 
Do you wish to continue? (Y/N): y 
Please input the drivers home address (e.g. EH129DN): EH129DN 
Valid 
Do you wish to continue? (Y/N): y 
Please input the drivers home address (e.g. EH129DN): EH1 29DN 
Invalid 
Do you wish to continue? (Y/N): n 

Обратите внимание, что если вы пытаетесь сопоставить все действующие почтовые индексы, вам нужно будет исследовать более существенное регулярное выражение. Я сохранил вашу существующую логику, но теперь она позволяет дополнительное пространство между ними. Кроме того, я использовал raw_input(), поскольку вам нужен ввод текста.

0

Попробуйте использовать raw_input вместо ввода.

import re 
address = raw_input("Please input the drivers home address (e.g. EH129DN): ") 
addresspattern = "[A-Z][A-Z]/d/d/s/d[A-Z][A-Z]" 
match = re.search(address, addresspattern) 
if match: 
    Continue = raw_input("Do you wish to continue? (Y/N): ") 

Разница между входом и raw_input Differences between `input` and `raw_input`

0

Вы можете попробовать что-то вроде этого, он делает предположение о том, что всегда будет 2 прописные буквы, а затем 3-х цифр, и 2 заглавные буквы

m = re.search(r'[A-Z]{2}[1-9]{3}[A-Z]{2}', addresspattern) 
if m: 
    #TODO 
Смежные вопросы