Я являюсь абсолютным 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
Если я правильно понял ваш вопрос, вам, возможно, не придется использовать регулярные выражения вообще.
На основе вашего примера:
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-]+
Попробуйте это,
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='')