正则表达式在java中用空格和双引号标记字符串

时间:2013-02-06 17:28:32

标签: java regex

我正在尝试创建一个正则表达式来标记字符串。示例字符串将是。

"hello world" Alexandros Alex "I Am" Something

我需要回复:

hello world
Alexandros
Alex 
I am
Something

所以说清楚,用空格标记,但不用引号内的单词。 如果这是一个容易的regural expresion提前抱歉,但我总是与这些争论。

3 个答案:

答案 0 :(得分:2)

您可以尝试:\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

答案 1 :(得分:1)

此正则表达式将匹配引号中的单词或整个字符串:"[^"]*"|\w*

您可以使用此正则表达式创建匹配器,并迭代所有匹配项。您可以找到一些示例代码here

答案 2 :(得分:0)

如果您想拆分,可以通过检查"是否达到平衡来实现。

现在很明显,如果空格在""之间,则"的数量将不均匀。这就是下面的regex所做的

\s(?=(?:([^"]*"[^"]*"[^"]*)*|[^"]*)$)