Java Regex ReplaceAll具有分组功能

时间:2014-11-24 14:46:28

标签: java regex

我想用以下方式用标签围绕所有标记:

输入:" abc fg asd "

输出:" <token>abc</token> <token>fg</token> <token>asd</token> "

这是我到目前为止尝试的代码:

String regex = "(\\s)([a-zA-Z]+)(\\s)";
String text = " abc fg      asd ";
text = text.replaceAll(regex, "$1<token>$2</token>$3");
System.out.println(text);

输出:" <token>abc</token> fg <token>asd</token> "

注意:为简单起见,我们可以假设输入以空格开头和结尾

3 个答案:

答案 0 :(得分:2)

使用lookaround

String regex = "(?<=\\s)([a-zA-Z]+)(?=\\s)";
...
text = text.replaceAll(regex, "<token>$1</token>");

答案 1 :(得分:0)

如果您的令牌仅使用角色类定义,则不需要描述周围的角色。所以这应该足够了,因为正则表达式引擎从左向右走,因为量词是贪婪的:

String regex = "[a-zA-Z]+";
text = text.replaceAll(regex, "<token>$0</token>");

答案 2 :(得分:0)

                                 // meaning not a space, 1+ times
String result = input.replaceAll("([^\\s]+)", "<token>$1</token>");

这匹配所有不是空格的东西。 Prolly最适合您的需求。它也是贪婪的意思,它永远不会遗漏一个它不应该的字符(当它与另一个匹配的字符时,它永远不会在字符串“asd”中找到字符串“as”)