我有一个String,其中包含以下子字符串:
[Qual:3] [Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1] [Elem:123]
我想在[Text:
和]
之间提取部分,即PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
。
我该怎么做?
答案 0 :(得分:4)
Pattern p = Pattern.compile("\\[Text:(.*?)\\]");
Matcher m = p.matcher("[Qual:3] [Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1] [Elem:123]");
m.find();
System.out.println(m.group(1));
给出:
PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
\\[
和\\]
将转义括号,这是正则表达式中的特殊字符。 .*?
是一个非贪婪的量词,所以当它到达结束时,它会停止吞噬字符。正则表达式的这一部分在捕获组()
内提供,您可以使用m.group(1)
访问该组。
答案 1 :(得分:2)
使用以下字符串作为正则表达式:
"\\[Text:(.*?)\\]"
第一个捕获组将为您提供所需的子字符串。
非贪婪的匹配(.*?
)需要在第一个]
停止,而不是包括[Elem:123]
。
答案 2 :(得分:0)
String.substring(int beginIndex, int endIndex)
返回一个新字符串,该字符串是此字符串的子字符串。
您可以使用它来删除字符串的开头和结尾,
...或
您可以使用
String.indexOf(String str)
获取匹配开始和结束的索引,并将内容复制到新的结果字符串。
您可以使用
String.matches(String regex)
然而,编写正则表达式可能会变得困难,
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
我希望这会有所帮助。
答案 3 :(得分:0)
而不是像其他人所建议的那样使用"\\[Text:(.*?)\\]"
,我会更进一步,使用lookarounds过滤掉你不想要的文本:
(?<=\\[Text:).*?(?=\\])
这将与您想要的文本完全匹配,而无需选择捕获组。