繁体   English   中英

正则表达式URL帮助:单词或短语

[英]Regex URL Help: Word or Phrase

我是正则表达式的绝对noob(我有点了解基础,需要帮助一个单词或短语。如果它是一个短语,那么用连字符分隔每个单词 - :

这是我目前的正则表达式,只匹配一个单词:

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+)/$

所以包括新的正则表达式INSIDE这个,其中?P \\ w +是D​​jango认为参数的任何单词(并传递给函数)。

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

所以,我需要再次匹配一个单词或短语,它们被传递到stream_query参数(或者如果需要,还有第二个)。 所以,我想要stream_query有:

word1

或word1-word2-word3

如果我正确理解您的问题,那么您可能根本不必使用正则表达式。

根据你的例子:

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-]+

试试这个,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM