我有一个字符串是
/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
