我正在尝试创建一个正则表达式来标记字符串。一个示例字符串是。
"hello world" Alexandros Alex "I Am" Something
我需要得到回应:
hello world
Alexandros
Alex
I am
Something
因此,为了清楚起见,使用空格而不是引号内的单词进行标记。如果这是一个简单的正则表达式,请提前抱歉,但我总是与这些作斗争。
你可以试试:\b(?:(?<=")[^"]*(?=")|\w+)\b
。这将从匹配项中排除实际报价。
import java.util.regex.*;
public class Test {
public static void main(String...args) {
String line = "\"hello world\" Alexandros Alex \"I Am\" Something";
Pattern pattern = Pattern.compile("\\b(?:(?<=\")[^\"]*(?=\")|\\w+)\\b");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
}
}
执行时,您会得到以下输出:
$ javac Test.java
$ java Test
hello world
Alexandros
Alex
I Am
Something
此正则表达式将匹配引号内的单词或整个字符串:"[^"]*"|\w*
您可以使用此正则表达式创建一个匹配器,然后遍历所有匹配项。你可以在这里找到一些示例代码
如果要拆分,可以通过检查是否"
平衡来实现。
现在显然,如果空间之间""
的数量"
不会是偶数..这就是下面regex
要做的
\s(?=(?:([^"]*"[^"]*"[^"]*)*|[^"]*)$)