正则表达式在字符串中找到两个标记之间的位置

时间:2011-02-16 13:55:03

标签: python regex

我需要在

之间找到任何东西
show_detail&

;session_id=1445045

in

https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0

在python中使用正则表达式。

我知道我需要使用lookbehind / ahead但我似乎无法使它工作!

请帮忙!

谢谢:)

5 个答案:

答案 0 :(得分:5)

为什么要使用正则表达式?

>>>> url = 'https://ww.site.gov.....'
>>> start = url.index('show_detail&') + len('show_detail&')
>>> end = url.index(';session_id=')
>>> url[start:end]
'id=4035219;num=1'

答案 1 :(得分:4)

>>> s= "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0"
>>> s.split(";session_id=1445045")[0].split("show_detail&")[-1]
'id=4035219;num=1'
>>>

答案 2 :(得分:2)

您可以在标记之间使用非贪婪匹配(。*?)。

>>> import re
>>> url = "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0"
>>> m = re.search("show_detail&(.*?);session_id=1445045", url)
>>> m.group(1)
'id=4035219;num=1'

答案 3 :(得分:0)

regex = re.compile(r"(?<=show_detail&amp;).*?(?=;session_id=1445045)"

应该有效。有关lookaround assertions的详细信息,请参阅此处。

答案 4 :(得分:0)

import re


url = "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&amp;id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0"
pattern = "([^>].+)(show_detail&amp;)([^>].+)(session_id=1445045)([^>].+)"
reg = re.compile(r''''''+pattern+'''''',flags = re.S)
match =reg.search(url)

print match.group(3)

这会起作用我认为