2013-10-03 4 views
-3

друзей. У меня есть этот код в моем питона приложения:Как я могу сделать это лучше? С Regex?

if '(' in obj.value or ')' in obj.value: 
    city, country = obj.value.upper()[:-1].split('(') 
    found = city.strip() == self.customer.city.upper() and country == self.customer.country.upper() 
else: 
    city = obj.value.upper() 
    found = city.strip() == self.customer.city.upper() 

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

«Нью-Йорк» или «Нью-Йорк (Нью-Йорк)»

Но проблема в том, что приведенный ниже код не гарантирует возможную ошибку, например, при отсутствии одной из скобок. Например

'Нью-Йорк Нью-Йорк)'

Как можно улучшить и защитить этот маленький фрагмент кода? Существует формула в Regex, например? (Я знаю некоторое регулярное выражение)

+3

'continue' является зарезервированным словом в Python, btw; вы не можете использовать его как имя переменной. –

+0

Спасибо @ErikAllik. Я отредактировал свой пример. Конечно, я не использую это слово. :) – ECC

+0

Чтобы уточнить - вы хотите, чтобы ни одна из круглых скобок, или _two_: открывающая и закрывающая, с открытием, предшествующим закрытию. Вы хотите только две заглавные буквы между этими круглыми скобками? Чем яснее ваши требования, тем лучше ответ вы получите ... – Floris

ответ

2
import re 
m = re.match('(.+) \((.+)\)', obj.value) 
if m: 
    city, country = m.groups() 
else: 
    city, country = obj.value, None 
+1

'city, country = obj.value, None' будет немного правильнее, семантически. –

+0

Отличная идея - спасибо! Изменили ответ. –

Смежные вопросы