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

时间:2015-04-02 07:05:56

标签: java regex regex-negation

我不是正则表达式的专家,在以下问题中需要你的帮助。

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

4 个答案:

答案 0 :(得分:1)

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

"\\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

答案 1 :(得分:1)

您可以使用简单的\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 - 边界

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

如果您在一个文本中有多个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));
    }
 }

答案 2 :(得分:0)

您可以使用:

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}).*", "$1"));
}

O / P:

JD014600001678885621

答案 3 :(得分: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());