从文本中提取客户唯一 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,}
客户 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 中实际使用此正则表达式,您将使用 Pattern
和 Matcher
类。例如,
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。
我需要从文本中提取客户 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,}
客户 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 中实际使用此正则表达式,您将使用 Pattern
和 Matcher
类。例如,
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。