regex 在Python中,如何打印给定字符串值的正则表达式的匹配项?

hi3rlvi2  于 2022-12-30  发布在  Python
关注(0)|答案(3)|浏览(121)

我在Python中有一个字符串“/browse/advanced-computer-science-modules?title=machine-learning”**,我想打印第二个"/"和第一个"?"之间的字符串,即"advanced-computer-science-modules"
我创建了一个如下所示的正则表达式^([a-z]*[\-]*[a-z])*?$,但是当我从re模块运行.findall()函数时,它什么也不输出。
我创建了自己的正则表达式,并在python中导入了re模块,下面是我的代码片段,没有返回任何内容。

regex = re.compile(r'^([a-z]*[\-]*[a-z])*?$')
str = '/browse/advanced-computer-science-modules?title=machine-learning'
print(regex.findall(str))
nwnhqdif

nwnhqdif1#

由于这看起来是一个URL,我建议您使用URL解析工具:

>>> from urllib.parse import urlsplit
>>> url = '/browse/advanced-computer-science-modules?title=machine-learning'
>>> s = urlsplit(url)
SplitResult(scheme='', netloc='', path='/browse/advanced-computer-science-modules', query='title=machine-learning', fragment='')
>>> s.path
'/browse/advanced-computer-science-modules'
>>> s.path.split('/')[-1]
'advanced-computer-science-modules'
kgsdhlau

kgsdhlau2#

正则表达式如下所示:

\/[a-zA-Z\-]+\?

然后你得到子字符串:

regex.findall(str)[1:len(str) - 1]

非常具体到这个问题,但它应该工作。

m0rkklqb

m0rkklqb3#

或者,可以使用stringsplit方法:

str = '/browse/advanced-computer-science-modules?title=machine-learning'
result = str.split('/')[-1].split('?')[0]

print(result)
#advanced-computer-science-modules

相关问题