我正在尝试获取由“-”分隔的单词串中最后一个“/”之后的前两个单词我使用的是python和regex。这里是我的字符串=“p/daphne-logo-espadrille/2208098001-BLACK-38-se.html”我想要的输出是“2208098001-黑色”我试过下面的正则表达式提取,但它是选择这整个事情“2208098001-黑色-38-se”.*(?〈=/)([\w-]+)
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()调用在第二个-处拆分,然后用破折号连接前两个数组元素。
re.sub()
/
split()
-
cld4siwp2#
下面是一个行之有效的模式:
(?<=\/)\d*-[^-]*
Test Here说明:
(?<=\/)
\d*
[^-]*
qhhrdooz3#
您可以使用具有取反字符类的捕获组
.*/([^-/]+-[^-/]+)[^/]*$
.*/
(
[^-/]+
)
[^/]*
$
参见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
3条答案
按热度按时间kqhtkvqz1#
我们可以尝试以下方法:
对
re.sub()
的调用去掉了最后一个/
之前的前导内容,split()
调用在第二个-
处拆分,然后用破折号连接前两个数组元素。cld4siwp2#
下面是一个行之有效的模式:
Test Here
说明:
(?<=\/)
:向后查找以检查前面的"/"\d*
:0或更多位数-
:连字符[^-]*
:除连字符外每隔一个字符qhhrdooz3#
您可以使用具有取反字符类的捕获组
.*/
匹配到最后/
(
捕获组1[^-/]+
匹配除/
和-
之外的1+个字符-
匹配[^-/]+
再次匹配除/
和-
之外的1+个字符)
关闭组1[^/]*
匹配/
以外的可选字符$
字符串结束参见regex101 demo。
或仅匹配单词字符
参见另一个regex101 demo。
例如
产出