regex 如何使用正则表达式只获取字符串中最后一个“/”后面用“-”分隔的前两个单词?

6vl6ewon  于 2023-02-25  发布在  其他
关注(0)|答案(3)|浏览(193)

我正在尝试获取由“-”分隔的单词串中最后一个“/”之后的前两个单词
我使用的是python和regex。
这里是我的字符串=“p/daphne-logo-espadrille/2208098001-BLACK-38-se.html”
我想要的输出是“2208098001-黑色
我试过下面的正则表达式提取,但它是选择这整个事情“2208098001-黑色-38-se”
.*(?〈=/)([\w-]+)

kqhtkvqz

kqhtkvqz1#

我们可以尝试以下方法:

inp = "p/daphne-logo-espadrille/2208098001-BLACK-38-se.html"
output = "-".join(re.sub(r'^.*/', '', inp).split("-", 2)[:2])
print(output)  # 2208098001-BLACK

re.sub()的调用去掉了最后一个/之前的前导内容,split()调用在第二个-处拆分,然后用破折号连接前两个数组元素。

cld4siwp

cld4siwp2#

下面是一个行之有效的模式:

(?<=\/)\d*-[^-]*

Test Here
说明:

  • (?<=\/):向后查找以检查前面的"/"
  • \d*:0或更多位数
  • -:连字符
  • [^-]*:除连字符外每隔一个字符
qhhrdooz

qhhrdooz3#

您可以使用具有取反字符类的捕获组

.*/([^-/]+-[^-/]+)[^/]*$
    • 说明**
  • .*/匹配到最后/
  • (捕获组1
  • [^-/]+匹配除/-之外的1+个字符
  • -匹配
  • [^-/]+再次匹配除/-之外的1+个字符
  • )关闭组1
  • [^/]*匹配/以外的可选字符
  • $字符串结束

参见regex101 demo
或仅匹配单词字符

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

参见另一个regex101 demo
例如

import re

s = "p/daphne-logo-espadrille/2208098001-BLACK-38-se.html"
pattern = r".*/([^-/]+-[^-/]+)[^/]*$"
m = re.match(pattern, s)
if m:
    print(m.group(1))

产出

2208098001-BLACK

相关问题