Справка по Regex URL: Слово или Фраза

4

Я являюсь абсолютным noob в regex (я знаю основы и должен помогать слову или фразе. Если это фраза, то отделяйте каждое слово с дефис -:

Это мое текущее регулярное выражение, которое соответствует только одному слову:

r'^streams/search/(?P<stream_query>\w+)/$

Параметр "P" позволяет URL-адресу принимать параметр.

Дополнительная заметка: я использую модуль python re с Django urls.py

Любые предложения?

Вот несколько примеров:

game
gsl
starcraft-2014
final-fantasy-iv
word1-word2-word-3

Обновленное объяснение: Мне в основном нужно регулярное выражение для расширения текущего, поэтому внутри одного и того же регулярного выражения нет другого:

r'^streams/search/(?P<stream_query>\w+)/$

Итак, включите новое регулярное выражение INSIDE this, где? P\w + - любое слово, которое Django считает параметром (и передается в функцию).

Определение URL, которое включает в себя регулярное выражение:   url (r '^ streams/search/(? P\w +)/$', 'stream_search', name= 'stream_search')

Затем Django передает этот параметр в функцию stream_search, которая принимает этот параметр:

def stream_search(request, stream_query):
    #here I manipulate the stream_query string, ie: removing the hyphens

Итак, еще раз мне нужно, чтобы re соответствовало слову или фразе, которые передаются в параметр stream_query (или, если необходимо, второй). Итак, я хочу, чтобы stream_query имел:

word1

или   слово1-слово2-слово3

  • 0
    Не могли бы вы привести пример двух случаев, которые вы пытаетесь сопоставить?
  • 0
    Я не уверен, что вы хотите. Я предполагаю, что вы хотите регулярное выражение для слова и фразы, как дано. Я бы предложил "[az] +" для слова и [az \ -] для слов, разделенных Hypen
Показать ещё 4 комментария
Теги:
url
django-urls

2 ответа

1
Лучший ответ

Если я правильно понял ваш вопрос, вам, возможно, не придется использовать регулярные выражения вообще.

На основе вашего примера:

example.com/streams/search/rocket-league-fsdfs-fsdfs

Кажется, что термин, с которым вы хотите иметь дело, всегда находится после последнего /. Таким образом, вы можете rsplit, а затем проверить -. Вот пример:

url = "example.com/streams/search/rocket-league-fsdfs-fsdfs"
result = url.rsplit("/", 1)[-1]
#result = ["example.com/streams/search", "rocket-league-fsdfs-fsdfs"]
if "-" in result:
    #do whatever you want with the string
else:
    #do whatever you want with the string

или регулярное выражение, которое будет соответствовать либо word, либо word-word-word: [\w-]+

  • 0
    Проблема в том, что Django сначала требует параметр, в данном случае rocket-league-sdfd-fdsds или word1 , а затем я могу использовать запрос в качестве переформатированной строки. Итак, я получаю rocket-league-fdsf-fsds в формате THAT, чтобы не получить ошибку 404, а затем я могу удалить дефисы или сделать все, что захочу
  • 0
    @alexcons Можете ли вы расширить свой вопрос, чтобы привести полный пример того, что вам нужно? Я не использую django, поэтому я не знаю, что вы подразумеваете под «сначала требуется параметр».
Показать ещё 5 комментариев
0

Попробуйте это,

import re
str = "http://example.com/something?id=123&action=yes"
regex = "(query\d+)=(\w+)"
re.findall(regex, str)

Вы также можете использовать библиотеку urlparse Python,

from urlparse import url parse
urlparse = urlparse("http://example.com/something?id=123&action=yes")

Просто позвоните url parse, чтобы вернуть

ParseResult(scheme='http', netloc='example.com', path='/something', params='', query='id=123&action=yes', fragment='')

Изображение 130289

  • 0
    Как бы я внедрил это в предоставленный мною URL? Я абсолютный новичок с регулярным выражением
  • 0
    Если я правильно понял ваш вопрос, вы пытаетесь получить параметры URL, что означает, что "(query \ d +) = (\ w +)", которые возвращают значения после = и до &

Ещё вопросы

Сообщество Overcoder
Наверх
Меню