我已经搜索了条件前缀的答案,但我是空白的。我预计我会遗漏一些简单的东西,但我没有成功。
我希望将所有这些系列与一个正则表达式匹配:
以下是逻辑部分:
匹配示例(字母和数字是任意的):
1234567
1234567B1
1234567A2
1234567AA
AA1234567
AA1234567A1
AA1234567
AA1234567BB
拒绝:
12345678
/ 1234567
-1234567
:1234567
01234567
AB12345678AB
我尝试了什么:
我一直试图在那里分组。匹配七个连续数字显然很简单'[0-9] {7}',但我很难匹配可选组中的插入符号字符。
例如,如果我做'[^ \ d]?[0-9] {7}'希望匹配一个可能有前缀的七位数字,但该前缀不能是一个数字,我的匹配没有前缀失败(即只有七位数字符串)。
显然我是正则表达式的新手,所以任何帮助都表示赞赏。
编辑谢谢大家!这些中的每一个似乎都会对我的实际测试文件产生非常接近的结果,我将不得不测试一下,但暂时看起来我们有多个正确而有效的答案。
答案 0 :(得分:1)
使用此正则表达式^[a-zA-Z]{0,2}\d{7}([a-zA-Z][a-zA-Z\d])?$
^ string begin
[a-zA-Z]{0,2}Maybe 2 Letter Prefix, Maybe word boundary
\d{7} seven digits
([a-zA-Z][a-zA-Z\d])?Maybe 2 character prefix [first always letter, second letter or number], maybe word boundary
$ string end
答案 1 :(得分:0)
$ awk '/^([[:alpha:]]{2})?[[:digit:]]{7}([[:alpha:]][[:alnum:]])?$/' file
1234567
1234567B1
1234567A2
1234567AA
AA1234567
AA1234567A1
AA1234567
AA1234567BB
$ awk '!/^([[:alpha:]]{2})?[[:digit:]]{7}([[:alpha:]][[:alnum:]])?$/' file
12345678
/1234567
-1234567
:1234567
01234567
AB12345678AB
答案 2 :(得分:0)
perl -lnE 'print if m{
\A # Beginning of string
(?: [a-z]{2} | \b )? # (Maybe 2 Letter Prefix, Maybe word boundary)
\d{7} # (seven digits)
(?: [a-z][a-z\d] | \b )? # (Maybe 2 character suffix [first always letter, second letter or number], maybe word boundary)
\z # End of string
}xmsi' < file
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -nr '/^([a-z]{2})?[0-9]{7}([a-z][a-z0-9])?$/Ip' file