2017-02-16 66 views
0

一直试图找出这一点,没有得到太多的成功。我想知道是否有人可以帮忙。正则表达式(蟒蛇)捕获参数积极lookahead

我有一系列潜在的字符串,下面是来源。基本上,我试图从参数中检索某个值(假设my_param);但它可能在string的开头,string的中间或string的末尾。

如何生成pythonregex以捕获所有情况下的此情况?

这是我到目前为止有:((&_csrf)|(_csrf))=(.*)(?=&)

的问题是,如果它是在string结束返回没有匹配或者有多个parameters那么它在未来parameter肿块。

任何人都可以帮忙吗?

谢谢!

源串1:

my_param=stuffinhereIwant&some_other_param=Idontcareaboutthis&some_param2=Don'tWantThisEither 

源串2:

some_param=Idontcareaboutthis&my_param=stuffinhereIwant&some_param2=Don'tWantThisEither 

源串3:

some_param=Idontcareaboutthis&some_param2=Don'tWantThisEither&my_param=stuffinhereIwant 

源串4:

my_param=stuffhereIwant 
+0

您的字符串是否总是被'my_param ='预置?如果不是,请更好地澄清您的匹配规则。 – zwer

回答

0

查询字符串最好用parse_qs函数处理。

try: 
    from urllib.parse import parse_qs # Python 3 
except: 
    from urlparse import parse_qs # Python 2.7 

d = parse_qs(query_string) 
d['my_param'][0] 
+0

如果你只需要一个值,你为什么要解析整个查询? – zwer

+0

它具有验证它的正确格式,处理时髦字符组合等附加值。 只需说它是Pythonic方式即可。 –

+0

谢谢,这比我一直在寻找的更好!甚至不知道这个图书馆存在。 – icemanhx

0

下,你只需要my_param假设=

import re 

your_stuff = re.findall(r"(?:^|[&? ])my_param=(.*?)(?:&|$)", your_source_string) 

请记住,这将发现的所有事件,如果不止一个,所以your_stuff包含结果的数组。如果您只希望获得单个结果,则可以使用re.search()代替。

+0

谢谢这是非常有用的 – icemanhx

+0

轻微的问题,这会删除字符串're.sub(r“(?:^ | [&?])中的下一个&找到my_param =(。*?)(?:&| $) “,”&my_param = {0}“。format(”newtoken“),request)' – icemanhx