我想搜索字符串作为标识符。标识符可以有4个变体正则表达式 - 使用正则表达式在另一个字符串中搜索特定的字符串
REF964758362562
REF964-758362-562
964758362562
964-758362-562
标识符可以位于字符串中的任何位置,也可以位于它自己的位置。例如:
Lorem ipsum REF964-758362-562
Lorem ipsum ABCD964-758362-562 lorem ipsum
Lorem ipsum REF964-758362-562 lorem ipsum
REF964-758362-562 Lorem ipsum 1234-123456-22
Lorem ipsum 964-758362-562 lorem ipsum
REF964758362562
REF964-758362-562
964758362562
964-758362-562
当连字符/破折号字符在标识符中使用的,连字符将始终显示如实施例中所示的第三和第九位之后。
下面是我想出的,但我怀疑正则表达式变得太长,它可能会缩短。当 标识符不在字符串的开头时,这也可以很好地工作。任何提示/想法?
^[A-Z]*REF[A-Z]*([12]\d{3})(\d{6})(\d{2})$|^([12]\d{3})(\d{6})(\d{2})[A-Z]*REF[A-Z]*|^([12]\d{3})(\d{6})(\d{2})$
我已经把他们的群体,因为一旦我已经提取的标识符,我想添加的连字符如果标识符没有连字符。例如,如果提取的 标识符是964758362562
,我想将它保存为964-758362-562
。
这里有一些测试中,我已经运行,正如你所看到的不是他们中的很多匹配
testRegex = "^[A-Z]*REF[A-Z]*([12]\\d{3})(\\d{6})(\\d{2})$|^([12]\\d{3})(\\d{6})(\\d{2})[A-Z]*REF[A-Z]*|^([12]\\d{3})(\\d{6})(\\d{2})$";
PATTERN = Pattern.compile(testRegex, Pattern.CASE_INSENSITIVE);
m = PATTERN.matcher("Lorem ipsum REF964-758362-562");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("REF964-758362-562 Lorem ipsum 1234-123456-22");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("Lorem ipsum 964-758362-562 lorem ipsum");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("Lorem ipsum ABCD964-758362-562 lorem ipsum");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("REF964758362562");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("REF964-758362-562");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("964758362562");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
m = PATTERN.matcher("964-758362-562");
if(m.matches()) {
System.out.println("Match = " + m.group());
}else{
System.out.println("No match");
}
输出
No match
Match = Not known
No match
No match
No match
No match
No match
No match
No match
No match
这将接受'123-123456123'。不知道这是OP想要的。 – Pshemo
@Pshemo你说得对,OP可能不想要。莱梅向那里进行了反向引用。 –
如果使用连字符/短划线,则应该存在两个破折号。 – ziggy