regex - 正则表达式模式强制匹配条件而不是另一个条件
问题描述
我试图强制匹配这些条件:
- 如果以 1,2,3 个数字 + 1 个空格 + 1 个字母结尾。
- 如果模式在字符串中间匹配,则忽略它。
输入:
ME001000 RV 2 B <- 需要匹配
ME001000 G 10 B <- 需要匹配
ME001000 RE 321 B <- 需要匹配
MP260000 EQTE 1 A <- 需要匹配
EL008002P TR 06 A 1 <- 不需要匹配,因为在字符串的中间
正则表达式模式:([0-9]{1} [A-Z]{1}|[0-9]{2} [A-Z]{1}|[0-9]{3} [A-Z]{1})+(?:[0-9]{2} [A-Z]{1}\s)
Part:
([0-9]{1} [A-Z]{1}|[0-9]{2} [A-Z]{1}|[0-9]{3} [A-Z]{1})
: 匹配正确,但也与“06 A”(最后一个字符串的中间)匹配Part:
+(?:[0-9]{2} [A-Z]{1}\s)
: 为了强制不匹配
我需要做什么来强制不匹配?
解决方案
您要使用的正则表达式是:
\d{1,3} [A-Z]$
\d{1,3}
匹配 1 到 3 位数字匹配单个空格。
[A-Z]
匹配大写字母。$
匹配字符串的结尾。
您最需要的是$
锚,以确保您要查找的内容位于字符串的末尾。
正则表达式演示使用 JavaScript 规范(您没有指定使用的语言)并使用标志g
和m
. 该g
标志用于查找多个匹配项,该m
标志用于$
匹配行尾和字符串结尾的锚。
正如 ggorlen 指出的那样,您可能需要考虑稍作修改:
\b\d{1,3} [A-Z]$
以上确保您尝试匹配的模式的第一个数字从单词边界开始(即,它前面是非单词字符或字符串的开头)。
推荐阅读
- java - 从函数构建端点值 - 注释属性 X 的值必须是常量表达式
- javascript - 将侦听器添加到由 .innerHTML 创建的按钮
- java - 在 Recyclerview 中使用外部数据库
- python - 如何在一个会话中多次更改我的网络驱动程序上的代理?
- matlab - 高斯脉冲发生器模块问题
- angularjs - 从指令中的 localStorageService 访问数据
- php - 如何在 Swift 的 post 请求中找到另一种使用“&”的方式
- asp.net-core - 使用asp.net core MVC 2.1中可能的配置设置进行DI注入?
- c# - 使用带有存储过程的 dapper 到列表
- amazon-web-services - 在不同的 Kubernetes 托管服务提供商之间切换是否容易?