Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式在最后一个正斜杠和第一个连字符之间获取文本_Python_Regex_Parsing - Fatal编程技术网

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

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/

我需要解析URL,并从以下位置获取1585710:

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