Skip to main content
 首页 » 编程设计

python之如何使用正则表达式提取关键子串和 "/"之间的字符串

2025年05月04日45zdz8207

我有一个字符串是

/path/to/file?_subject_ID_SOMEOTHERSTRING 

path/to/file 部分根据情况变化,subject_ID 始终存在。我尝试编写一个仅提取字符串的 file 部分的正则表达式。使用 ?subject_ID 是确定的,但我不知道如何安全地获取 file

我当前的正则表达式看起来像 (.*[\/]).*\?_subject_ID

url = '/path/to/file?_subject_ID_SOMEOTHERSTRING' 
file_re = re.compile('(.*[\/]).*\?_subject_ID') 
file_re.search(url) 

这会找到正确的字符串,但我仍然无法提取文件名

打印 _.group(1) 会得到 /path/to/。获取实际文件名的下一步是什么?

请您参考如下方法:

至于您的 '(.*[\/]).*\?_subject_ID' 正则表达式方法,您只需在第二个 .* 周围添加一个捕获组>。你可以使用 r'(.*/)(.*)\?_subject_ID' (然后,会有 .group(1) 和 .group(2) 部分被抓取),但这并不是Python解析URL最合适的方式。

你可以在这里使用非正则表达式的方法,这里有一个片段展示了如何利用 urlparse 和 os.path 像你一样解析 URL:

import urlparse 
path = urlparse.urlparse('/path/to/file?_subject_ID_SOMEOTHERSTRING').path 
import os.path 
print(os.path.split(path)[1]) # => file 
print(os.path.split(path)[0]) # => /path/to 

参见 IDEONE demo