Как я могу разделить это на две строки?

Я новичок в Python, я не уверен, что мне следует искать, но я заверяю вас, что я провел мое исследование и все еще придумал довольно уродливый 20-строчный блок кода для этой простой проблемы.

Я обрабатываю URL-адрес обхода с моим приложением на основе инфраструктуры Pyramid.

Теперь URL может быть следующим: (url = None)

  1. url = ""
  2. url = "/"
  3. url = "/ block_1"
  4. url = "/ block_1 /"
  5. url = "/ block_1 / block_2"
  6. url = "/ block_1 / block_2 /"

URL не может содержать ничего. В этом случае я хочу, чтобы моя функция возвращала False, None или пустой список или кортеж. (Не имеет значения, какой.) (Соответствующие опции 0 или 1)

Block_1: это одно слово, от a до Z. Не может и не должен содержать никаких специальных символов. Фактически, то, что выбрано как block_1, должно быть в словаре (или списке), а если не найдено, ошибка должна быть поднята и возвращена. Если block_1 не существует или не найден, функция, как указано выше, должна возвращать False, None или пустой список или кортеж. (соответствующие варианты 2 и 3)

Block_2: Block_2 может быть любым. Для простоты он может содержать любые символы любых языков наряду со специальными символами, такими как: () []. Извините меня, если я ошибаюсь, но я думаю, что я хочу, чтобы он соответствовал [\pL\pN].* , За одним исключением: его последний символ не может быть ни косой черты: ни "\" ни "/" , Предпочтительно, я хотел бы, чтобы он был a to Z (including all languages' alphabets and their accented characters) along with some other characters from a list (которые я определяю специально, как указано выше: () и []). Если block_2 не задано, оно должно иметь значение None и если оно не согласовано, оно должно возвращать значение False. (сопоставление последних двух опций, перечисленных выше)

Мой код начинается с, довольно примитивно, за что я извиняюсь:

 if not url: return False # then goes on evaluating the first charachter to see if it's a / if fetch[0] == '/': length = len(url) #then checks if there's a second / for the block_2 slash_2 = fetch.find('/', 3) # or '/', 1 if slash_2 == -1: block_1, block_2 = url[1:length].lower(), None # checks if block_1 is in a dictionary if not block_1 in the_dict: return False else: # if it's there it processes what's remaining block_1 = fetch[1:slash_2] block_2 = fetch[slash_2+1:] # then checks if there's another slash at the end of block_2 if block_2[-1] == '/': # if so it removes it block_2 = block_2[:-1] return False # otherwise returns false, which can be () or [] or None 

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

Итак, как я могу это сделать? Что мне делать, чтобы избавиться от этих замятых строк кода?

Спасибо.

2 Solutions collect form web for “Как я могу разделить это на две строки?”

split('/') обязательно должно использоваться, и это должно помочь вам разобрать URL.

Если этого недостаточно, urlparse следует использовать для анализа

 urlparse.urlparse(path) 
 In [31]: url = 'http://stackoverflow.com/questions/12809298/how-can-i-separate-this-into-two-strings/12809315#12809315' In [32]: urlparse.urlparse(url) Out[32]: ParseResult(scheme='http', netloc='stackoverflow.com', path='/questions/12809298/how-can-i-separate-this-into-two-strings/12809315', params='', query='', fragment='12809315') In [33]: a = urlparse.urlparse(url) In [34]: a.path Out[34]: '/questions/12809298/how-can-i-separate-this-into-two-strings/12809315' In [35]: a.path.split('/') Out[35]: ['', 'questions', '12809298', 'how-can-i-separate-this-into-two-strings', '12809315'] 

Первое, что я попробую, это .split() string :

 >>> url = "/block_1/block_2" >>> url.split("/") ['', 'block_1', 'block_2'] 

Это вернет список компонентов строки, которые были разделены символом / . Оттуда вы можете использовать функцию len() чтобы узнать длину списка и предпринять соответствующие действия в соответствии с вашей желаемой логикой.

  • Ошибка Selenium Webdriver: «Невозможно загрузить профиль»
  • django.core.exceptions.ImproperlyConfigured
  • Регулярное выражение Python: включение пробела внутри диапазона символов
  • установлена ​​подушка, но «нет модуля с подушкой» - python2.7 - Windows 7 - подушка для установки python -m
  • Сбор данных из определенных файлов
  • Абсолютный импорт в python не работает, относительная импортная работа
  • Использовать печать внутри лямбда
  • Как импортировать из файла конфигурации в Flask?
  • Python - лучший язык программирования в мире.