我正在尝试创建一个正则表达式来标记字符串。示例字符串将是。
"hello world" Alexandros Alex "I Am" Something
我需要回复:
hello world
Alexandros
Alex
I am
Something
所以说清楚,用空格标记,但不用引号内的单词。 如果这是一个容易的regural expresion提前抱歉,但我总是与这些争论。
答案 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(?=(?:([^"]*"[^"]*"[^"]*)*|[^"]*)$)