我有一个总是像Mfr Part#: MBRB1045G Technologie ...
或Mfr Part#: MBRB1545CTT4G Mounting
那样构建的字符串,所以总是Mfr Part#:
然后我要提取partnumber
,然后是其他字符所占用的Technologie
或Mounting
。
如何从中提取该部分号MBRB1045G
?
答案 0 :(得分:3)
这应该可以解决问题:
final Pattern pattern = Pattern
.compile("Mfr Part#: ([^ ]+) (Technologie|Mounting).*");
final Matcher matcher = pattern
.matcher("Mfr Part#: MBRB1045G Mounting");
matcher.matches();
System.out.println(matcher.group(1));
但是,如果检查字符串是否具有该特定模式并不重要,您也可以使用更简单的表达式:Mfr Part#: ([^ ]+) .*
另请注意,您可以存储模式对象并将其重复用于后续使用。这将为您提供更好的表现。
答案 1 :(得分:0)
我可能会使用java.util.Scanner
。这可能不是最佳方式,但在我的意见中最舒服。
它会这样工作:
import java.util.Scaner;
String s = "Mfr Part#: MBRB1045G Technologie RZ137GA";
Scanner scn = new Scanner(s);
scn.next();
scn.next();
String partnumber = scn.next();
scn.next();
String technologie = scn.next();
scn.close();
变量partnumber
包含MBRB1045G
,technologie
包含RZ137GA
。
答案 2 :(得分:0)
分组的正则表达式可能是最好的。 (google for perlre)
String input = "Mfr Part#: MBRB1045G Technologie";
String regexpression = "Mfr Part#: (\\w+) (\\w+)";
Pattern p = Pattern.compile(regexpression);
Matcher m = p.matcher(input);
if (m.matches()) {
String part = m.group(1);
String desc = m.group(2);
System.out.println(part);
System.out.println(desc);
}
答案 3 :(得分:0)
我看到两种方法(可能还有其他方法):regexp和groups,或indexOf和substring
1)Regexp和群组
String input = "Mfr Part#: MBRB1045G Technologie";
Pattern p = Patter.compile("Mfr Part#: ([A-Z0-9]+) (Technologie|Mounting)");
Matcher m = p.matcher(input);
while(m.find()) {
System.err.println("Part number: "+m.group(1)+ "Second part is "+m.group(2);
}
2)indexOf和substring
String prefix = "Mfr Part#: ";
String input = "Mfr Part#: MBRB1045G Technologie";
for (int i= 0;i<input.length();i++) {
int index1 = input.indexOf(prefix);
int index2 = index1+prefix.length();
int index3 = input.indexOf(" ", );
int index4 = input.indexOf(" ", index3+1);
System.err.println("Part number: "+input.substring(index2, index3)
+ "Second part is "+input.substring(index3, index4);
index = index4;
}
警告:我没有运行它,所以你可能需要修复错别字。