regex - 正则表达式匹配,直到找到带有或不带有引号的冒号
问题描述
我正在寻找一个正则表达式来实现以下目标:
当我的输入是 root:Folder1:fname
我想得到fname
以及当输入字符串root:Folder1:'fname'
再次获取时fname
(没有引号!)。
因为前者[^:?]*$
似乎完成了工作,但我找不到一个匹配这两种情况的正则表达式。
是否可以使用单个正则表达式来做到这一点?试图用条件正则表达式来实现它,但我做不到。
欢迎任何其他提示/解决方案。
谢谢你。
编辑:路径的格式不固定,引号可能出现在别处(例如 root:'Folder with spaces1':fname 或 root:'Folder with spaces1':'fname')。我猜的解决方案是向后搜索,因为我们要捕获的文件名总是在最后一个冒号之后。
解决方案
当您标记 pcre 时,您还可以使用分支重置组在单引号之间或不在单引号之间获取组 1。
^.*:(?|'(\w+)'|(\w+))$
^
字符串的开始.*:
匹配到最后:
(?|
分支重置组'(\w+)'
在单引号之间 捕获 1+ 个单词字符|
或(\w+)
捕获 1+ 个单词字符
)
关闭分支重置组$
字符串结束
推荐阅读
- excel - 为什么当我按下运行时 VBA 要求我输入宏名称?
- html - html5 和 css3 已经变得非常疯狂,并且做了我以前从未见过的事情。总共有3个问题
- python - 循环中的动画 imshow() 不更新
- memory - 每个进程都有自己的页面目录吗?
- typescript - 可以用什么表达式替换条件类型中的“扩展对象”
- oracle - dba_scheduler_job_run_details 和 dbms_output
- swift - SwiftUI - 点击按钮执行视觉功能
- python - 将参数传递给 shell 命令
- java - 管理具有相互引用的 ID 的对象?(中介模式?)
- javascript - 提交事件未在 JavaScript 中执行所需的输出