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

Я новичок в 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() чтобы узнать длину списка и предпринять соответствующие действия в соответствии с вашей желаемой логикой.

  • Проблема установки Python matplotlib в Windows 7 для freetype, пакетов png
  • не удается установить matplotlib с помощью pip
  • Какая магия python выполняет dir () с __getattr__?
  • Как удалить нечисловой столбец из входного набора данных?
  • API Perforce для Python 2.7
  • Как воспроизвести UnicodeEncodeError?
  • Импортировать библиотеку Python из Github
  • Преобразование XLSX в CSV правильно с использованием python
  • Ошибка Python + Ubuntu Linux + nohup: + Выход
  • Python: как присоединиться к записям в наборе в одну строку?
  • Ли ' +' equal '(a | b) +' в модуле python re?
  •  
    Interesting Posts for Van-Lav

    PicklingError: не может pickle <type 'function'> с помощью пула процессов python

    Scapy: нет ответа на сырой пакет ICMP

    Проверка совместимости при компиляции типов расширений и использование их с помощью cdef

    Разница между классом foo и классом foo (object) в Python

    Base64 Authentication Python

    Как использовать `numpy.savez` в цикле для сохранения нескольких массивов?

    IDLE не может импортировать Tkinter. Ваш Python не может быть настроен для Tk

    Две версии python на linux. как сделать 2.7 по умолчанию

    Горизонтальное масштабирование ноутбука Ipython

    Перейти в среднюю программу Interactive Session на Python?

    Конструктор TypeError возвратил NULL при импорте pyplot в ssh

    gpg –passphrase-fd не работает с подпроцессом python 3

    Как добавить фоновое изображение в pygame?

    Регулярное выражение Python над несколькими символами перевода строки

    В Python, почему отдельные значения словарной строки передают «in» проверки равенства? (Эксперимент Interning)

    Python - лучший язык программирования в мире.