我尝试使用固定长度和模式获得子串。
Pattern:
***********<<*******<*******<<<<<<<*
Charcates/numbers:
0123456789A<<BCDEFGH<IJKLMNO<<<<<<<P
* = A-Z0-9
我有:
String input = "ZIO<UP<GKJHGKJHGJ0123456789A<<BCDEFGH<IJKLMNO<<<<<<<PJHGKJHGKJ";
我想得到:
String output = "0123456789A<<BCDEFGH<IJKLMNO<<<<<<<P";
提取此子字符串的最佳方法是什么? 一些正则表达式的建议?
答案 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)
答案 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]