我想用以下方式用标签围绕所有标记:
输入:" 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> "
注意:为简单起见,我们可以假设输入以空格开头和结尾
答案 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”)