捕获组中的负向后看

Lan*_*ank 6 regex regex-group regex-lookarounds

我正在尝试编写一些正则表达式,以使我可以对捕获组进行隐式查找,以便可以从电子邮件中提取可能的引用。我需要知道如何从某个角度看向第一个空白。如果找到一个数字,我不希望提取引用。

我已经达到如下所示。我有2个捕获组-'PreRef'和'Ref'。如果'PreRef'包含数字,我不希望找到'Ref'匹配项。到目前为止,我只检查冒号前面的字符是否为数字。

(?<PreRef>\S+)(?<![\d]):(?<Ref>\d{5})
Run Code Online (Sandbox Code Playgroud)

此处的“参考”匹配为12345:

This is a reference:12345
Run Code Online (Sandbox Code Playgroud)

但是不是这里(“引用”一词中有5):

This is not a ref5rence:12345
Run Code Online (Sandbox Code Playgroud)

小智 3

您可以从类中排除数字\S,然后用空格边界包围表达式
,然后使用 viola ..

(?<!\S)(?<PreRef>[^\s\d]+):(?<Ref>\d{5})(?!\S)

https://regex101.com/r/JrU7Kd/1

解释

 (?<! \S )                     # Whitespace boundary
 (?<PreRef> [^\s\d]+ )         # (1), Not whitespace nor digit
 :                             # Colon
 (?<Ref> \d{5} )               # (2), Five digits
 (?! \S )                      # Whitespace boundary
Run Code Online (Sandbox Code Playgroud)