regex - 一个捕获组中的正则表达式条件匹配
问题描述
我有一个字符串,它可能以以下形式出现:
"filename.first_order.png"
"filename.second_order.png"
"filename.png"
"filename.(jpg|tif|etc)"
我需要匹配包含名称和扩展名的字符串的第一部分 - 但是,如果字符串是一阶/二阶类型,我需要匹配“first_order”/“second_order”作为第二组,而不是“ png”,我无法让这两个条件在一个捕获组中共存。示例匹配:
imageondisk.first_order.png -> [imageondisk, first_order]
anotherfile.png -> [anotherfile, png]
meetingminutes.jpeg -> [meetingminutes, jpeg]
我觉得我已经使用了各种前瞻、后视和 ?s 的组合,这一定看起来像是一个没有受过教育的绝望的烂摊子,但无论我做什么,当我将它们结合在一起时,我永远无法得到它们不冲突的结果 -这看起来像
(.+)\.(tif|jpg|<png when not preceded by first/second_order>|<first/second_order, ignoring the .png on the end>)
除了我刚刚进入了一个令人沮丧的非捕获组和环视似乎在同一个地方结束的兔子洞,我觉得我知道的正则表达式比以前少了。
帮助将不胜感激。
解决方案
您可以使用此正则表达式,它捕获组 1 中的文件名、组 2 中的任何一阶/二阶字符串以及组 3 中的扩展名:
^([^.]+)(?:\.(.+))?\.(png|jpg|tif)$
推荐阅读
- c - 如果包含文件,文件中的全局变量是否可访问?
- jquery - 如何获取标签的id并应用于操作ul的内容
- c# - 禁用超时时 SqlBulkCopy 到 Azure 超时
- r - R Shiny 中的聊天机器人窗口
- windows - docker上的RabbitMQ:无法检查/重新声明自动删除队列
- django - 选择相关执行查询
- here-api - 如何通过 HERE Map (here-api) 获取阿联酋的城市和社区列表
- android - Android自定义相机范围(TextureView)
- javascript - 从网站获取速率以写入 .txt 文件的脚本
- github-api - Github repos 的批量编辑器?