我是正则表达式的绝对菜鸟(我知道基础知识,需要帮助一个单词或短语。如果它是一个短语,那么用连字符分隔每个单词 - :
这是我目前的正则表达式,只匹配一个单词:
r'^streams/search/(?P<stream_query>\w+)/$
?P只允许URL获取参数。
额外注意:我正在使用带有Django urls.py
的python re模块有什么建议吗?
以下是一些例子:
game
gsl
starcraft-2014
final-fantasy-iv
word1-word2-word-3
更新说明: 我基本上需要一个正则表达式来扩展当前的表达式,所以在同一个正则表达式中,没有其他的:
r'^streams/search/(?P<stream_query>\w+)/$
所以在这个中包含新的正则表达式,其中?P \ w +是Django认为参数的任何单词(并传递给函数)。
网址定义,包括正则表达式: url(r&#39; ^ streams / search /(?P \ w +)/ $&#39;,&#39; stream_search&#39;,name =&#39; stream_search&#39;)
然后,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-WORD2-WORD3
答案 0 :(得分: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-]+
答案 1 :(得分: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='')