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