python正则表达式模式提取两个字符之间的值

时间:2012-10-03 23:50:33

标签: python regex url

我正在尝试以

的形式从网址中提取ID号
http://www.domain.com/some-slug-here/person/237570
http://www.domain.com/person/237570

这些网址中的任何一个也可以在它们上面加上参数

http://www.domain.com/some-slug-here/person/237570?q=some+search+string
http://www.domain.com/person/237570?q=some+search+string

我已经尝试过以下表达式从上面的网址中捕获'237570'的id值,但每种方法都有效,但确实适用于所有四个网址场景。

(?<=person\/)(.*)(?=\?)
(?<=person\/)(.*)(?=\?|\z)
(?<=person\/)(.*)(?=\??*)

我所看到的是它正在获得237570,但包括?和在网址后面的字符。当你点击?,/或字符串的结尾时,怎么说停止捕捉?

2 个答案:

答案 0 :(得分:2)

字符串:

http://www.domain.com/some-slug-here/person/1234?q=some+search+string
http://www.domain.com/person/3456?q=some+search+string
http://www.domain.com/some-slug-here/person/5678
http://www.domain.com/person/7890

正则表达式:

person\/(\d{1,})

输出:

>>> regex.findall(string)
[u'1234', u'3456', u'5678', u'7890']

答案 1 :(得分:1)

请勿使用.*来匹配ID。 .将匹配任何字符(换行符除外,除非您使用DOTALL选项)。只需匹配一堆数字:(.*) - &gt; (\d+)