首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有当后面有文本时,RegExp才检查签名

只有当后面有文本时,RegExp才检查签名
EN

Stack Overflow用户
提问于 2018-09-21 11:24:05
回答 2查看 29关注 0票数 1

我有一些情况,我需要使用regex进行过滤。需要过滤的值列如下:

代码语言:javascript
复制
// These should be catched
123456_Test.pdf
123456 Test.pdf
123456.pdf

// These shouldn't be catched
123456Abcasd.pdf
123456-Abcasd.pdf
123456_.pdf

当前的regEx如下所示:

(\d{6,7})((\_| ){0,1})(.*)\..*

这里的问题是,后三个也是匹配的。为了给你一个简短的概述,第一个“错误”匹配的字符串有什么问题:

第一个捕获组必须由6-7数字组成。(最后还需要捕获组)。如果在这些数字后面有字母,则必须有空格或下划线。“不应该被抓”的第一个例子显示了这一点。该条目无效,因为在 123456后面有字母123456,没有所需的符号。

最后一条并不重要,只是为了方便起见。

我遗漏了什么?我如何调整我的正则表达式,使我可以检查标志,只有当有字母在一个数字链后面?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 11:34:29

你可以用

代码语言:javascript
复制
^(\d{6,7})([_ ][A-Za-z].*)?\..*$

regex演示

详细信息

  • ^ -字符串的开始
  • (\d{6,7}) -第1组:6位或7位
  • ([_ ][A-Za-z].*)? -一个可选的捕获组#2:一个_或空格后面跟着一个字母,然后是尽可能多的0+字符,直到最后
  • 线上的\. - .
  • .* -行的其余部分
  • $ -字符串的末端。
票数 1
EN

Stack Overflow用户

发布于 2018-09-21 13:47:56

检查这个perl解决方案是否适合您。

代码语言:javascript
复制
> cat regex_catch.dat
123456_Test.pdf
123456 Test.pdf
123456.pdf

123456Abcasd.pdf
123456-Abcasd.pdf
123456_.pdf
> perl -ne ' print if m/\d+(([ _])[a-zA-Z]+| [a-zA-Z]*)?\.pdf/ ' regex_catch.dat
123456_Test.pdf
123456 Test.pdf
123456.pdf
>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52442697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档