1

我已经搜索了条件前缀的答案,但我是空白的。我预计我错过了一些简单的东西,但我一直没有成功。

我希望将所有这些系列与单个正则表达式行匹配:

以下是逻辑部分:

  1. (可能是 2 个字母前缀,可能是单词边界)
  2. (七位数)
  3. (可能是 2 个字符后缀 [第一个总是字母,第二个字母或数字],可能是单词边界)

匹配示例(字母和数字是任意的):

1234567

1234567B1

1234567A2

1234567AA

AA1234567

AA1234567A1

AA1234567

AA1234567BB

被拒绝:

12345678

/1234567

-1234567

:1234567

01234567

AB12345678AB


我试过的:

我一直试图在那里分组。匹配七个连续数字显然很简单'[0-9]{7}',但我很难匹配可选组中的插入符号 NOT 字符。

例如,如果我执行 '[^\d]?[0-9]{7}' 希望匹配一个可能有前缀的七位数字,但该前缀不能是数字,我没有前缀的匹配失败(即只是一个七位数的字符串)。

显然我是正则表达式的新手,所以任何帮助表示赞赏。


编辑谢谢大家!这些中的每一个似乎都会产生与我的实际测试文件非常接近的结果,我将不得不测试一下,但目前看起来我们有多个正确和有效的答案。

4

4 回答 4

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
于 2013-01-07T17:29:16.217 回答
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
于 2013-01-07T19:10:38.270 回答
0

这可能对您有用(GNU sed):

sed -nr '/^([a-z]{2})?[0-9]{7}([a-z][a-z0-9])?$/Ip' file
于 2013-01-07T20:46:15.287 回答
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
于 2013-01-07T18:30:10.380 回答