Python正则表达式在最后一个正斜杠和第一个连字符之间获取文本
我需要解析URL,并从以下位置获取1585710:Python正则表达式在最后一个正斜杠和第一个连字符之间获取文本,python,regex,parsing,Python,Regex,Parsing,我需要解析URL,并从以下位置获取1585710: http://www.example.com/0/100013573/1585710-key-description-goes-here 这意味着它介于最后一个/和第一个之前- 我对正则表达式几乎没有经验,这对我来说是一个很难理解的概念 任何帮助都将不胜感激 编辑:使用Python。使用下面的正则表达式并从组索引1中获取数字 ^.*\/([^-]*)-.*$ 代码: >>重新导入 >>>s=”http://www.example.com/
http://www.example.com/0/100013573/1585710-key-description-goes-here
这意味着它介于最后一个/和第一个之前-
我对正则表达式几乎没有经验,这对我来说是一个很难理解的概念
任何帮助都将不胜感激
编辑:使用Python。使用下面的正则表达式并从组索引1中获取数字
^.*\/([^-]*)-.*$
代码:
>>重新导入
>>>s=”http://www.example.com/0/100013573/1585710-key-description-goes-here"
>>>m=re.search(r'^.*\/([^-]*)-.*$',s,re.m)
>>>m
>>>m组(1)
'1585710'
>>>m=重新搜索(r'.*\/([^-]*)-*,s)
>>>m组(1)
'1585710'
>>>m=重新搜索(r'.*\/([^-]*),s)
>>>m组(1)
'1585710'
说明:
匹配所有字符直到最后一个*\/
符号/
捕获任何字符,但不捕获([^-]*)
的零次或多次-
匹配所有剩余字符-.*
包含第一个捕获组捕获的字符。打印组(1)将得到所需的结果组(1)
/
和-
之间的任何字符串,只需执行以下操作:
/.-
因为
是任意字符,*
是任意数量。但是,这带来了一个问题,因为您可以得到整个/www.example.com/0/100013573/1585710关键描述,它位于/
和-
之间。因此,您需要做的是搜索任何不是/
和-
的内容:
/[^/-]*-
^
表示否,介于[]
之间的任何内容大致都是一个OR列表
希望有帮助
编辑:不,正如用户rici提到的,当您的url名称中有一个-
时(如www.lala-lele.com
),它没有帮助
要确保是您得到的最后一个/
,您可以匹配字符串的其余部分,确保它在结尾($
)之前没有任何/
),如所示:
/[^/-]*-[^/]*$
而且,要仅获取其中的字符串,您可以:
/\([^/-]*\)-[^/]*$
由于\(
和\)
指定您想要作为正则表达式输出的内容。您可以使用匹配组来提取带有正则表达式的数字\/(\d+)-
:
查看您使用的是哪种编程语言?不同的语言有不同风格的正则表达式!哦,对不起,我不知道!我正在使用Python:-)例如,(?因此regex被分别实现到每种语言中?是否有任何标准或仅由“主要语言”设置的标准?有几个大型库被一些语言共享(特别是PCRE和Oniguruma);但是有许多语言是从头开始实现它们的。regexp实现必须具备一些东西(作为正则表达式数学思想的基本实现),还有一些扩展,不同语言可以实现更小或更大的程度(大多数正则表达式都偏离了数学正则表达式,一些明显偏离了正则表达式,使regexp具有更大的功能)。OP需要最后一个斜杠和下一个破折号之间的字符串。例如,在/www.best-example.com/0/100013573/1585710上,您的正则表达式将失败。
>>> 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'
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