Java 从两个字符串之间提取复杂字符串
我有一个字符串,其中包含以下子字符串:Java 从两个字符串之间提取复杂字符串,java,regex,Java,Regex,我有一个字符串,其中包含以下子字符串: [Qual:3][Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1][Elem:123] 我想提取[文本:和]之间的部分,即PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1 如何执行此操作?使用以下字符串作为正则表达式: "\\[Text:(.*?)\\]" 第一个捕获组将为您提供所需的子字符串 非贪婪匹配(*?)需要使其在第一个]处停止,而
[Qual:3][Text:PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1][Elem:123]
我想提取[文本:
和]
之间的部分,即PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
如何执行此操作?使用以下字符串作为正则表达式:
"\\[Text:(.*?)\\]"
第一个捕获组将为您提供所需的子字符串
非贪婪匹配(
*?
)需要使其在第一个]
处停止,而不是同时包含[Elem:123]
使用以下字符串作为正则表达式:
"\\[Text:(.*?)\\]"
String.substring(int beginIndex, int endIndex)
第一个捕获组将为您提供所需的子字符串
非贪婪匹配(*?
)需要使其在第一个]
处停止,而不是同时包括[Elem:123]
String.substring(int beginIndex, int endIndex)
返回作为此字符串的子字符串的新字符串
您可以使用它删除字符串的开头和结尾
或者
你可以用
String.indexOf(String str)
获取匹配开始和结束的索引,并将内容复制到新的结果字符串
你可以用
String.matches(String regex)
然而,编写正则表达式可能会变得困难
我希望这有帮助
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));
返回作为此字符串的子字符串的新字符串
您可以使用它删除字符串的开头和结尾
或者
你可以用
String.indexOf(String str)
获取匹配开始和结束的索引,并将内容复制到新的结果字符串
你可以用
String.matches(String regex)
然而,编写正则表达式可能会变得困难
我希望这有帮助
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)
访问该组
给出:
PIX 1252471471953/YHYF/PPP121.40/10RTY10/NOLXX08X1
\\[
和\\]
用于转义括号,括号是正则表达式中的特殊字符。*?
是一个非贪婪的量词,因此当它到达结束括号时,它停止吞食字符。正则表达式的这一部分是在捕获组()
中给出的,您可以使用m.group(1)
访问该组,而不是像其他人建议的那样使用“\\\[Text:(.*?\\]”
,我会更进一步,使用lookarounds筛选出您不想要的文本:
(?而不是像其他人建议的那样使用“\\[Text:(.*?\\]””
,我会更进一步,使用lookarounds过滤掉您不想要的文本:
(?\\[Text:(.*)\\].
从我的头顶使用String.substring(int,int)
和String.indexOf(String,int)
我一直在尝试改变这里的建议\[Text:(.*).
从我的头顶使用String.substring(int,int)
和String.indexOf(String,int)
我一直在尝试对这里的建议进行修改,比我快!+1。@mip,注意*?
和*
之间的区别。一位评论者建议*
,但这不起作用;它不会停在应该停的地方。快来吧!+1。@mip,注意*?
和*
之间的区别。一个很多评论者建议*
,但这不起作用;它不会停在它应该停的地方。谢谢。Java会是什么样子?我会替换m.find
和m.group(1)
?谢谢。Java会是什么样子?我会替换m.find
和m.group(1)
?