在我的应用程序中,我可以使用此字符串:
String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]";
800
和810
是随机的。现在我想使用\[(.*?)\]
这样的正则表达式来捕获括号中的任何\n
字符串。这意味着得到这样的字符串:
800\n810
怎么做并在括号之间获取所有数字数据并为test
提供新值?
Pattern pattern = Pattern.compile ( "\\[([^]]*)\\]" );
Matcher matcher = pattern.matcher(test );
test = matcher.group();
答案 0 :(得分:0)
如何做到并在括号中获取所有数字数据
您可以使用此正则表达式:
\[(\d+)\]
在Java中,它将是:\\[(\\d+)\\]
要捕获方括号之间的任何内容,请使用:
\[([^]]*)\]
Java代码:
Pattern p = Pattern.compile("\\[(\\d+)\\]");
Matcher m = p.matcher( test );
while (matcher.find()) {
System.out.printf("Group: " + m.group(1));
}
答案 1 :(得分:0)
您也可以尝试使用Look around来获取括号内的数字。
正则表达式:
(?<=\[)\d+(?=\])
Look behind for [ ---------^^^ ^^^------------Look ahead for ]
示例代码:
String test = "hello" + "[" + 800 + "]" + "\n" + "world" + "[" + 810 + "]";
String regex="(?<=\\[)\\d+(?=\\])";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(test);
while(matcher.find()){
System.out.println(matcher.group());
}
输出:
800
810
要在括号之间捕获任何,请使用以下正则表达式:
(?<=\[)[^]]+(?=\])
答案 2 :(得分:0)
查看Pattern的javadoc。
您的示例与"hello8\nworld1"
匹配 - 严格"\r?\n"
也可能包含Windows行结尾,其中包含两个字符CR又名\r
和LF又名\n
-
正则表达式字符串中的反斜杠字符串中的反斜杠需要进行转义,反斜杠,自己。一个非常痛苦的国家。
点.
与行结尾不匹配,但存在一个改变此行为的选项DOTALL。您也可以使用命令字符串(?s)
(=单行)设置DOT_ALL。
Pattern pattern = Pattern.compile("(?s)\\[(.*?)\\]");
Pattern pattern = Pattern.compile("\\[(.*?)\\]", Pattern.DOTALL);
Matcher m = pattern.matcher(".....");
//while (m.find() { } // Search in the middle
//if (m.matches()) { } // Match all
if (m.lookingAt()) { // Starting
String s = m.group(1);
}
带有最终问号(.*?)
的热切表单确保最短匹配,而不是在遇到]
时搜索更多]
。