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

标签 python regex

我有一个字符串是

/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最合适的方式。

你可以在这里使用非正则表达式的方法,这里有一个片段展示了如何利用 urlparseos.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

关于python - 如何使用正则表达式提取关键子串和 "/"之间的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38064184/

相关文章:

javascript - 如果变量包含非数字字符则发出警报?

regex - 如何在 awk 语句中对 aready 字段使用模式匹配?

python - 从其他 many2many 字段中填充 many2many 字段

python - 如何在我的 Web 服务器上运行 Python 脚本?

javascript - 正则表达式使链接可点击(仅在 'a href' 而不是 'img src' )

用加法替换字符串的数字部分

python - Django 图像未上传

c++ - Ubuntu 10.04 中的 Boost.Python 教程

python - 使用 Panda 从 CSV 文件中在 python 中绘制两列以上

javascript - 正则表达式 - 用换行符替换第三个点和空格