RegEx条件前缀&已知长度内部数字的后缀

时间:2013-01-07 17:22:14

标签: regex bash sed grep

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

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

以下是逻辑部分:

  1. (也许2个字母前缀,可能是字边界)
  2. (七位数)
  3. (也许2个字符后缀[第一个总是字母,第二个字母或者 数字],也许是单词边界)
  4. 匹配示例(字母和数字是任意的):

    1234567

    1234567B1

    1234567A2

    1234567AA

    AA1234567

    AA1234567A1

    AA1234567

    AA1234567BB

    拒绝:

    12345678

    / 1234567

    -1234567

    :1234567

    01234567

    AB12345678AB


    我尝试了什么:

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

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

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


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

4 个答案:

答案 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