RegExp仅当后面有文本时才检查符号
我有一些案例,需要使用RegExp仅当后面有文本时才检查符号,regex,Regex,我有一些案例,需要使用regex进行过滤。下面列出了需要过滤的值: // These should be catched 123456_Test.pdf 123456 Test.pdf 123456.pdf // These shouldn't be catched 123456Abcasd.pdf 123456-Abcasd.pdf 123456_.pdf 当前的正则表达式如下所示: (\d{6,7})((\\\\|){0,1})(.*)\..* 这里的问题是,后3个也是匹配的。为了给您一
regex
进行过滤。下面列出了需要过滤的值:
// These should be catched
123456_Test.pdf
123456 Test.pdf
123456.pdf
// These shouldn't be catched
123456Abcasd.pdf
123456-Abcasd.pdf
123456_.pdf
当前的正则表达式如下所示:
(\d{6,7})((\\\\|){0,1})(.*)\..*
这里的问题是,后3个也是匹配的。为了给您一个简短的概述,第一个“错误”匹配字符串有什么问题:
第一个捕获组必须由6-7位
数字组成。(最后还需要捕获组)如果这些数字后面有字母,则必须有空格或下划线。“不应该被抓住”的第一个例子说明了这一点。该条目无效,因为在123456之后有字母,但没有所需的符号
最后一条并不重要,只是为了方便
我错过了什么?如何调整正则表达式,使其仅在数字链后面有字母时才能检查符号?您可以使用
^(\d{6,7})([_ ][A-Za-z].*)?\..*$
见
详细信息
-字符串的开头^
-第1组:6或7位数字(\d{6,7})
-一个可选的捕获组#2:A([[u][A-Za-z].*)
或后跟字母的空格,然后是尽可能多的任何0+字符,直到最后一个字符。
-\.
在线
-行的其余部分*
-字符串结束$
> 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
>
试试看,你的工作很有魅力!非常感谢你。你想把它添加为答案吗?