2

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

"hello world" Alexandros Alex "I Am" Something

我需要得到回应:

hello world
Alexandros
Alex 
I am
Something

因此,为了清楚起见,使用空格而不是引号内的单词进行标记。如果这是一个简单的正则表达式,请提前抱歉,但我总是与这些作斗争。

4

3 回答 3

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
于 2013-02-06T17:40:18.977 回答
1

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

您可以使用此正则表达式创建一个匹配器,然后遍历所有匹配项。你可以在这里找到一些示例代码

于 2013-02-06T17:36:19.920 回答
0

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

现在显然,如果空间之间""的数量"不会是偶数..这就是下面regex要做的

\s(?=(?:([^"]*"[^"]*"[^"]*)*|[^"]*)$)
于 2013-02-06T17:42:27.467 回答