首页 文章

使用Regex,是否可以使用'Followed by'或'Preceded by'等表达式

提问于
浏览
2

我有以下表达式,我想提取12位数的标识符:

([12]\d{3})(\d{6})(\d{2})

如果字符串采用以下格式,则此方法正常:

ABCD123456789101
123456789101

当它得到如下的字符串时,它如何知道要匹配的12个数字:

ABCD1234567894837376383439434343232
1234567894837376383439434343232

在上面的场景中,我不想选择十二位数 . 所以答案我认为只选择十二位数字,如果这12位数字不在其他数字之前或之前 . 我试过这个改变:

[^0-9]([12]\d{3})(\d{6})(\d{2})[^0-9]

这基本上只有在12位数字之前和之后的字符都是非数字时才能获得12位数字 . 我遇到的问题是我也将这些非数字字符作为匹配的一部分,即

ABCD123456789483X7376383439434343232 returns D123456789483X

无论如何检查前面和前面的字符是什么但不包括在匹配结果中?即,如果前面和前面的字符是非数字但在匹配结果中不包括那些非数字字符,则仅匹配 .

1 回答

  • 4

    你可以使用lookarounds:

    (?<!\\d)([12]\d{3})(\d{6})(\d{2})(?!\\d)
    

    这里:

    • (?<!\\d) 是一个负面的lookbehind,这意味着你的模式前面没有数字

    • (?!\\d) 是一个负向前瞻,这意味着您的模式后面没有数字

    阅读更多关于外观的信息

相关问题