正则表达式捕获第一个冒号之间的单词 : 和最后一个带有冒号的方括号 : 在里面
Regex to capture words between the first colon : and the last square brackets having colon : in it
我有一个要解析的字符串。
字符串是这样的:-
00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]
注意最后一个方括号中有一个 : 冒号。 Some More 之前的字符也是冒号。我想捕获它们之间的所有字符。
目前我正在用下面的正则表达式将其解析为两个 steps.Here 是 java 代码。
class JavaReg{
public static void main(String[] args){
String str = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
String[] strArr = str.split("\[.*?\]\:\s");
String[] str12 = strArr[1].split("\[\w*?\:.*");
for(String strinj : strArr)
System.out.println(strinj);
System.out.println(str12[0]);
}
}
以下是上述练习的结果。
00:0qwe8.0 donald controller duck
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]
最后一串是我想要的。它从冒号 : 开始捕获,并继续捕获到带有冒号的方括号。
问题是我可以使用正则表达式中的捕获组一次性捕获它吗?
如何在 Java 中做到这一点?
您可以使用以下正则表达式来提取匹配项:
\[[^\]\[]*\]:\s*(.*?)\[\w*:
参见regex demo。
详情
\[
- 一个 [
字符
[^\]\[]*
- ]
和 [
以外的 0+ 个字符
\]:
- ]:
子串
\s*
- 0+ 个空格
(.*?)
- 第 1 组:除换行字符外的任何 0 个或多个字符,尽可能少
\[
- [
字符
\w*
- 0+ 字母、数字或 _
:
- 一个冒号。
与 Matcher#find()
一起使用并获取 matcher.group(1)
,请参阅 Java demo:
String str = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
Pattern pattern = Pattern.compile("\[[^\]\[]*\]:\s*(.*?)\[\w*:");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
System.out.println(matcher.group(1));
}
// => Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]
您可以使用这个单一的正则表达式来捕获您想要的字符串:
(?<=\]: ).*(?=\[)
在这里,(?<=\]: )
这种积极的看法与 ]:
字面上匹配您提到的数据,从那时起,贪婪地捕捉一切,直到它看到最后一个 [
还包含一个冒号,虽然因为那是你想要捕获的地方,我没有进一步限制冒号。
但是如果你还想强制它应该在 [something1:something2]
之前停止匹配,那么你可以使用这个正则表达式,
(?<=\]: ).*(?=\[[^[\]]*:[^[\]]*\])
Java代码
String s = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
Pattern p = Pattern.compile("(?<=\]: ).*(?=\[[^\[\]]*:[^\[\]]*\])");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group());
}
打印:
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]
我有一个要解析的字符串。 字符串是这样的:-
00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]
注意最后一个方括号中有一个 : 冒号。 Some More 之前的字符也是冒号。我想捕获它们之间的所有字符。
目前我正在用下面的正则表达式将其解析为两个 steps.Here 是 java 代码。
class JavaReg{
public static void main(String[] args){
String str = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
String[] strArr = str.split("\[.*?\]\:\s");
String[] str12 = strArr[1].split("\[\w*?\:.*");
for(String strinj : strArr)
System.out.println(strinj);
System.out.println(str12[0]);
}
}
以下是上述练习的结果。
00:0qwe8.0 donald controller duck
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]
最后一串是我想要的。它从冒号 : 开始捕获,并继续捕获到带有冒号的方括号。
问题是我可以使用正则表达式中的捕获组一次性捕获它吗? 如何在 Java 中做到这一点?
您可以使用以下正则表达式来提取匹配项:
\[[^\]\[]*\]:\s*(.*?)\[\w*:
参见regex demo。
详情
\[
- 一个[
字符[^\]\[]*
-]
和[
以外的 0+ 个字符
\]:
-]:
子串\s*
- 0+ 个空格(.*?)
- 第 1 组:除换行字符外的任何 0 个或多个字符,尽可能少\[
-[
字符\w*
- 0+ 字母、数字或_
:
- 一个冒号。
与 Matcher#find()
一起使用并获取 matcher.group(1)
,请参阅 Java demo:
String str = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
Pattern pattern = Pattern.compile("\[[^\]\[]*\]:\s*(.*?)\[\w*:");
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
System.out.println(matcher.group(1));
}
// => Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]
您可以使用这个单一的正则表达式来捕获您想要的字符串:
(?<=\]: ).*(?=\[)
在这里,(?<=\]: )
这种积极的看法与 ]:
字面上匹配您提到的数据,从那时起,贪婪地捕捉一切,直到它看到最后一个 [
还包含一个冒号,虽然因为那是你想要捕获的地方,我没有进一步限制冒号。
但是如果你还想强制它应该在 [something1:something2]
之前停止匹配,那么你可以使用这个正则表达式,
(?<=\]: ).*(?=\[[^[\]]*:[^[\]]*\])
Java代码
String s = "00:0qwe8.0 donald controller duck [02009&123@##]: Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#][15b:31013]";
Pattern p = Pattern.compile("(?<=\]: ).*(?=\[[^\[\]]*:[^\[\]]*\])");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group());
}
打印:
Some more sring here Model number 420 Family [Super-cool] [15b31013^^@#]