我不是正则表达式的专家,在以下问题中需要你的帮助。
我需要从包含以 JD 开头的字母的字符串中找到一个单词,该单词的长度已知,即 20 。
对于这种情况,假设String为"Your shipment 6016499344 was delivered at ABC JD014600001678885621 Piece ID"
。
答案 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());