Java正则表达式:查找字母-数字组合的序列,允许使用某些符号

Java正则表达式:查找字母-数字组合的序列,允许使用某些符号,java,regex,Java,Regex,我试图找到一个正则表达式来检测句子中的标记。这些标记应该是字母和数字的组合(必需),并带有可选字符,如,或 鉴于这句话: M5 x 35mm Full Thread Hexagon Bolts (DIN 933) - PEEK DescriptionThe M5 x 0.035mm, and 6NB7 plus a Go9IuN. 它应该找到六个代币: M5, 35mm, M5, 0.035mm, 6NB7, Go9IuN 我尝试了以下不起作用的方法: Pattern alphanum=Pa

我试图找到一个正则表达式来检测句子中的标记。这些标记应该是字母和数字的组合(必需),并带有可选字符,如,或

鉴于这句话:

M5 x 35mm Full Thread Hexagon Bolts (DIN 933) - PEEK DescriptionThe M5 x 0.035mm, and 6NB7 plus a Go9IuN.
它应该找到六个代币:

M5, 35mm, M5, 0.035mm, 6NB7, Go9IuN
我尝试了以下不起作用的方法:

Pattern alphanum=Pattern.compile("\\b(([A-Za-z].*[0-9])|([0-9].*[A-Za-z]))\\b");
有什么建议吗


谢谢

您可以使用正向前瞻来断言至少1个数字,然后匹配至少1个字符a-zA-Z

*
部分将过度匹配,因为它将匹配除换行符以外的任何字符0+次

\b(?=[a-zA-Z0-9.,]*[0-9])[a-zA-Z0-9.,]*[a-zA-Z][a-zA-Z0-9.,]*\b
解释

  • \b
    单词边界
  • (?=[a-zA-Z0-9.,]*[0-9])
    至少声明一位数字
  • [a-zA-Z0-9.,]*[a-zA-Z][a-zA-Z0-9.,]*
    至少匹配1个字符a-zA-Z
  • \b
    单词边界

在爪哇

final String regex = "\\b(?=[a-zA-Z0-9.,]*[0-9])[a-zA-Z0-9.,]*[a-zA-Z][a-zA-Z0-9.,]*\\b";

也许下面的正则表达式可以完成这项工作

(?=[A-Za-z,.]*\d)(?=[\d,.]*[A-Za-z])[A-Za-z\d,.]{2,}(?<![,.])
(?=[A-Za-z,.]*\d)(?=[\d,.]*[A-Za-z])[A-Za-z\d,.]{2,}(?)?
它从两个正的lookahead开始,形成
条件。
第一个前瞻
(?=[A-Za-z,.]*\d)
检查令牌是否至少包含一个数字。 第二个前瞻
(?=[\d,.]*[A-Za-z])
检查它是否至少包含一个字母

实际匹配的
[A-Za-z\d,.]{2,}
读取至少两个字母、数字、
。 最后,它检查匹配是否以以下特殊字符结尾:
(?)


谢谢您的快速回复。不过,也许我在我的帖子中没有说清楚……我不需要将“M5 x 35mm”作为一个序列(您的正则表达式似乎捕捉到了这个序列?),但任何单独的标记(用空格分隔)都是字母和数字的组合。字母/数字的顺序无关紧要……谢谢走近:)我将其修改为“\b([A-Za-z][0-9]+)\b([0-9]+(?:\.[0-9]+)?[A-Za-z]*)\b”,因为它不必只匹配“mm”。但这仍然不能捕获字母/数字组合的其他变体,如“6NB7”。请查看我的更新帖子…谢谢