2015-07-10 85 views
4

我是一個絕對的noob在正則表達式(我有點基本知識,需要幫助一個單詞或短語,如果它是一個短語,然後用連字符分隔每個單詞 - :正則表達式URL幫助:單詞或短語

這是我目前正則表達式,只匹配一個字:

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這一個,其中?P \ w +是D​​jango認爲參數(並傳遞給函數)的任何詞。

URL定義,其中包括正則表達式: URL(R '^流/搜索/(P \ W +)/ $?', 'stream_search',名稱= 'stream_search')

然後,Django的傳遞該參數爲stream_search功能,這需要該參數:

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

因此,再次,我需要重新匹配的詞或短語,被傳遞到stream_query參數(如果有必要,第二個)。 所以,我想什麼stream_query已經是:

word1 

或 字1,單詞2-WORD3

+0

可不可以給這兩種情況你要匹配的例子嗎? – Darwin

+0

我不確定你想要什麼。我假設你想要一個單詞和一個短語的正則表達式。我建議用「[a-z] +」表示單詞,用[a-z \ - ]表示單詞之間用hypen分隔的內容 – Gaara

+0

@達爾文只需添加幾個示例 – alexcons

回答

1

如果我理解你的問題正確,那麼你可能沒有在所有使用regexs。

根據您的例子:

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 

或將匹配要麼wordword-word-word將是一個正則表達式:[\w-]+

+0

問題是,Django首先需要一個參數,在本例中是** rocket-league-sdfd-fdsds **或** word1 **,然後我可以使用查詢作爲重新格式化的字符串。所以,我得到了THAT格式的火箭聯盟-fdsf-fsds,所以我沒有收到404錯誤,然後我可以刪除連字符或做我想要的任何東西 – alexcons

+0

@alexcons你可以擴展你的問題來給出一個完整的例子你需要?我不使用django,所以我不知道你的意思是「首先需要一個參數」。 – Darwin

+0

我剛更新了原文 – alexcons

0

試試這個,

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

您也可以使用Python裏urlparse庫,

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='') 

profile for 74U n3U7r1no at Stack Overflow, Q&A for professional and enthusiast programmers

+0

我如何將這個實現到我提供的URL中?我是一個絕對的初學者正則表達式 – alexcons

+0

如果我正確地理解了你的問題,你試圖抓住url的參數,這意味着「(query \ d +)=(\ w +)」返回值之後和之前& –