2015-07-10 71 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 +)”返回值之后和之前& –