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

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

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

此处的“引用”匹配为12345:
This is a reference:12345

但是不是这里(“引用”一词中有5):
This is not a ref5rence:12345

最佳答案

您可以从\S类中排除数字,然后将表达式括起来
带有空格边界,然后中提琴.. (?<!\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

10-06 13:49