获取具有固定长度的子串匹配模式

时间:2013-12-17 15:49:01

标签: java regex

我尝试使用固定长度和模式获得子串。

Pattern:
***********<<*******<*******<<<<<<<*

Charcates/numbers:
0123456789A<<BCDEFGH<IJKLMNO<<<<<<<P


* = A-Z0-9

我有:

String input = "ZIO<UP<GKJHGKJHGJ0123456789A<<BCDEFGH<IJKLMNO<<<<<<<PJHGKJHGKJ";

我想得到:

String output = "0123456789A<<BCDEFGH<IJKLMNO<<<<<<<P";

提取此子字符串的最佳方法是什么? 一些正则表达式的建议?

6 个答案:

答案 0 :(得分:2)

  

我想得到:0123456789A<<BCDEFGH<IJKLMNO<<<<<<<P ..如何提取这个子字符串?

更新:您可以使用以下内容。

String s  = "GKJHGKJHGJ0123456789A<<BCDEFGH<IJKLMNO<<<<<<<PJHGKJHGKJ";
Pattern p = Pattern.compile("[A-Z0-9]{11}<<[A-Z0-9]{7}<[A-Z0-9]{7}<{7}[A-Z0-9]");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group());
}

请参阅Live demo

您可以简化一下:

Pattern p = Pattern.compile("[A-Z0-9]{11}<<[^<]*<[^<]*<{7}[A-Z0-9]");

请参阅Live demo

答案 1 :(得分:1)

你可以试试这个正则表达式:

"^[A-Z0-9]+<<[A-Z0-9]+<[A-Z0-9]+<{7}[A-Z0-9]$"
  • ^ and $ =&gt;匹配行开始/结束
  • <{7} =&gt;匹配< 7次
  • [A-Z0-9]+ =&gt;匹配1个或多个大写字母或数字

答案 2 :(得分:1)

尝试使用此正则表达式:

[A-Z0-9]{11}<<[A-Z0-9]{7}<[A-Z0-9]{7}<{7}[A-Z0-9]

regex101 demo

答案 3 :(得分:0)

你的问题有点模糊。

如果*可以是任何A-Z0-9字符,那么代码就是:

final String result = string.subString(5, 10); // e.g.

虽然我可能会得到一个downvote,但我认为<字符是静态的。

答案 4 :(得分:0)

您可以使用^$来获取您的确切字词,甚至是简单的\bword\b模式。

一个有用的答案:Regular Expression to Match String Exactly?

更新:请忽略这一点;我误读了,以为你试图得到一个确切的词。 anubhava提供的答案应该让你去。

答案 5 :(得分:0)

这可能是未考虑的或部分因素。你应该考虑因素 什么更容易阅读/维护。

 # "[0-9A-Z]{11}<(?:<[0-9A-Z]{7}){2}<<<<<<<[0-9A-Z]"

 [0-9A-Z]{11} 
 <
 (?:
      < [0-9A-Z]{7} 
 ){2}
 <<<<<<<
 [0-9A-Z]