regex - 正则表达式获取语言匹配
问题描述
我有以下输入:
_YUE_ENSUB_L9939486_16X9
我想在YUE
and上匹配EN
。条件是:
- 两者之间
_
,它只允许[A-Z419]
。 - 它不应包含后缀
SUB
,SUBS
或FN
.
到目前为止,我有:
([A-Z419]+)(?:SUB|FN|SUBS)?
或者:
[A-Z419]{2,5}(?=SUB)
但两者都有点不足。什么是正确的正则表达式?我想可能是这样的,但它似乎有点矫枉过正,可能不是一个很好的匹配:
[A-Z419]+(?=SUB|FN|SUBS)|[A-Z419]+(?!=SUB|FN|SUBS)
以下是来自 的示例输入regex101
。
解决方案
您可以使用捕获组并将前瞻移动到第一个下划线之后。然后将 SUB 与可选的 S 或 FN 和下划线匹配。
_(?![A-Z419]*(?:SUBS?|FN)_)([A-Z419]+)_
解释
_
从字面上匹配(?!
负前瞻,断言右边的内容不匹配[A-Z419]*
匹配任何列出的字符 0+ 次(?:SUBS?|FN)_
匹配 SUB、SUBS 或 FN 后跟_
)
关闭前瞻(
捕获组 1[A-Z419]+
匹配任何列出的字符的 1 次以上
)_
关闭组并匹配下划线
对于更新的问题,您只能获得匹配项:
(?<=_)[A-Z419]+?(?=(?:SUBS?|FN)?_)
解释
(?<=_)
正向向后看,断言直接在左边的是_
[A-Z419]+?
尽可能匹配列出的字符之一(?=
积极的前瞻,断言什么是直接在右边(?:SUBS?|FN)?_
可选择匹配 SUB、SUBS 或 FN,后跟_
)
关闭前瞻
推荐阅读
- reactjs - 如何在 React-Redux 容器中访问 match?
- java - 无法导入 Eclipse 库
- java - 在递归重叠问题中应用 DP 记忆方法时得到错误的结果
- android - 如果有安全问题,它会被 google play console 成功发布吗?
- swift - 无法将“ViewController”类型的值分配给“WKNavigationDelegate”类型?
- java - 线程“主”java.lang.NullPointerException 中的异常以及如何修复它?
- git - 从发布管道推送到本地 Azure DevOps Git
- c# - CS1503 参数 1:无法从“Poc.Core.Player”转换为“Poc.Interfaces.IScheduleable”
- java - 如何在 JAVA 中将字节数组从 BGR24 转换为 JPG?
- javascript - 在javascript中多次执行自定义打字功能时出现问题