Python正则表达式在最后一个正斜杠之间和第一个连字符之间获取文本

时间:2014-09-24 04:03:43

标签: python regex parsing

我需要解析一个网址,然后从以下网址获取1585710:

http://www.example.com/0/100013573/1585710-key-description-goes-here

这意味着它介于最后一个/之前 - 和第一个之间 -

我对正则表达式的经验很少,这对我来说是一个非常难以理解的概念。

非常感谢任何帮助或帮助

编辑:使用Python。

3 个答案:

答案 0 :(得分:7)

使用以下正则表达式并从组索引1中获取数字。

^.*\/([^-]*)-.*$

DEMO

代码:

>>> import re
>>> s = "http://www.example.com/0/100013573/1585710-key-description-goes-here"
>>> m = re.search(r'^.*\/([^-]*)-.*$', s, re.M)
>>> m
<_sre.SRE_Match object at 0x7f8a51f07558>
>>> m.group(1)
'1585710'
>>> m = re.search(r'.*\/([^-]*)-.*', s)
>>> m.group(1)
'1585710'
>>> m = re.search(r'.*\/([^-]*)', s)
>>> m.group(1)
'1585710'

<强>解释

  • .*\/匹配最后一个/符号的所有字符。
  • ([^-]*)捕获-零次或多次的任何字符。
  • -.*匹配所有剩余的字符。
  • group(1)包含第一个捕获组捕获的字符。打印组(1)将得到所需的结果。

答案 1 :(得分:1)

好吧,如果您需要在/-之间找到任何字符串,您可以这样做:

/.*-

由于.是任何字符,*是任何数量。但是,这会带来一个问题,因为您可以获得整个/www.example.com/0/100013573/1585710-key-description-goes,它位于/-之间。那么,您需要做的是搜索不是/-的任何内容:

/[^/-]*-

^表示否,[]之间的任何内容大致都是OR列表。

希望有所帮助。

编辑:不,正如用户rici所提到的那样,如果您的网址名称中包含-(例如www.lala-lele.com),则无法提供帮助。

为了确保您获得的是最后一个/,您可以匹配其余的字符串,确保其中没有任何/直到结尾({{1} }},如:

$

而且,要获得其中的字符串,您可以:

/[^/-]*-[^/]*$

由于/\([^/-]*\)-[^/]*$\(指定了您想要的正则表达式输出。

答案 2 :(得分:1)

您可以使用匹配的组来使用正则表达式\/(\d+)-提取数字:

import re
s = 'http://www.example.com/0/100013573/1585710-key-description-goes-here'
m = re.search(r'\/(\d+)-', s)
print m.group(1) # 1585710

查看 Fiddler

相关问题