在 java 中查找以 'JD' 固定字长开头的单词的正则表达式

Regular Expression to find a word that starts with 'JD' fixed word length, in java

我不是正则表达式专家,需要您帮助解决以下问题。

我需要从包含以 JD 开头的字母的字符串中找到单词,单词的长度是已知的,即 20 . 对于这种情况,假设 String 是 "Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID".

您可以尝试使用以下带有模式和匹配器的正则表达式 类。

"\bJD\w{18}\b"

\b 匹配单词字符和非单词字符(反之亦然

示例:

String s =  "Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID";
Matcher m = Pattern.compile("\bJD\w{18}\b").matcher(s);
while(m.find())
{
    System.out.println(m.group());
}

String s =  "Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID";
Matcher m = Pattern.compile("(?<!\S)JD[A-Za-z\d]{18}(?!\S)").matcher(s);
while(m.find())
{
    System.out.println(m.group());
}

输出:

JD014600001678885621

您可以使用:

public static void main(String[] args) {
    String s = "Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID";
    System.out.println(s.replaceAll(".*(JD\d{18}).*", ""));
}

O/P :

JD014600001678885621

您可以使用简单的 \bJD[a-zA-Z0-9]{18}\b 正则表达式。

 String rx = "\bJD[a-zA-Z0-9]{18}\b";

解释:

  • \b - 边界
  • JD - 第一个条件 - 这些字母必须匹配
  • [a-zA-Z0-9]{18} - 从 a 到 z(不区分大小写)的任何拉丁字符或从 0 到 9 的数字
  • \b - 边界

您需要使用单词边界来仅匹配以 "JD" 开头的文本部分。

如果您在一篇文章中有多个 JD 字符串,您可以像这样匹配它们(参见 sample program here):

public static void main(String []args){

    String str = "Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID\nYour shipment 918947344 was delivered at ABC JD024900901978985929 Piece ID";
    String rx = "(?<=^|\b)JD[a-zA-Z0-9]{18}";
    Pattern ptrn = Pattern.compile(rx);
    Matcher m = ptrn.matcher(str);
    while (m.find()) {
        System.out.println(m.group(0));
    }
 }

使用 Matcher 对象并使用 Matcher.find() 在输入字符串中查找匹配项:

    Pattern p = Pattern.compile("\bJD\d{18}\b");
    Matcher m = p.matcher("Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID");
    m.find();
    System.out.println(m.group());