从文本中提取客户唯一 ID

Extracting Customer Unique IDs from Text

我需要从文本中提取客户 ID,它们是唯一的字母数字字符序列。它们可以仅包含数字或数字和字母字符或仅包含字母字符。我们可以假设它们超过 5 个字符。它们可能大写或不大写。

我想过用字典,如果这个字符序列不是字典里的一个词,而且是一个长度超过5的序列,那是个不错的选择。

任何想法或示例 java 代码都会有所帮助。谢谢

这是一个简单的正则表达式,可以匹配 6 个或更多字符的字母数字序列:

(?<![A-Za-z0-9])[A-Za-z0-9]{6,}

我在这里使用了负向后视而不是单词边界 (\b),以防您的文本中有下划线。如果你的正则表达式风格没有后视那么你会想要使用边界这个词(但我现在注意到你在你的问题中提到了 java - 而 java 确实有后视)。

如果客户 ID 必须包含数字,则匹配这些的正则表达式如下所示:

(?<![A-Za-z0-9])(?=[A-Za-z]*[0-9][A-Za-z0-9]*)[A-Za-z0-9]{6,}

Regex101 demo

客户 ID 的长度是否有限制?如果是这样,那么放入该限制可能会有所帮助 - 任何比该数字 的字母数字字符序列显然都不会匹配。例如,如果限制为 25 个字符,正则表达式将如下所示:

(?<![A-Za-z0-9])(?=[A-Za-z]*[0-9][A-Za-z0-9]*)[A-Za-z0-9]{6,25}(?![A-Za-z0-9])

(我在最后添加了前瞻,否则这可以简单地匹配一个长字母数字序列的前 25 个字符!)

一旦从文本中提取了匹配项,就可以进行字典查找。我知道 Whosebug 上有关于这个主题的问题和答案。

要在 Java 中实际使用此正则表达式,您将使用 PatternMatcher 类。例如,

String mypattern = "(?<![A-Za-z0-9])(?=[A-Za-z]*[0-9][A-Za-z0-9]*)[A-Za-z0-9]{6,25}(?![A-Za-z0-9])";
Pattern tomatch = Pattern.compile(mypattern);

等希望这有帮助。

更新

这只是我想到的,与其尝试字典匹配,不如将提取的值存储在数据库中 table,然后将其与您的客户进行比较 table。