java正则表达式,用于保留引号、单引号、连字符和在空白处拆分
我使用Java模式类将正则表达式指定为字符串
所以举个例子 我喜欢做蜘蛛侠:“彼得·帕克”
应该把蜘蛛侠和“彼得·帕克”列为单独的标记。 谢谢
try {
BufferedReader br = new BufferedReader(new FileReader(f));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
String everything = sb.toString();
List<String> result = new ArrayList<String>();
Pattern pat = Pattern.compile("([\"'].*?[\"']|[^ ]+)");
PatternTokenizer pt = new PatternTokenizer(new StringReader(everything),pat,0);
while (pt.incrementToken()) {
result.add(pt.getAttribute(CharTermAttribute.class).toString());
}
}
catch (Exception e) {
throw new RuntimeException(e);
}
所以我猜“some word”不起作用的原因是因为每个标记本身就是一个字符串。 有什么线索吗?谢谢!
# 1 楼答案
如果它不必是正则表达式,并且字符串中的数据是正确的(引号顺序正确,不像
" ' some data " '
),那么您可以在一次迭代中这样做输出
# 2 楼答案
检查此正则表达式是否符合您的需要:
我假设你没有(单/双)报价
关于分隔符还有一个假设:我只允许空格和
:
用作分隔符。在"foo_bar"
中不会匹配任何内容。如果要添加更多分隔符,例如;
、.
、,
、?
,请将其添加到“向前看”和“向后看”断言中的字符类中,如下所示:尚未对每个输入进行测试,但我已经对这个输入进行了测试:
这对我来说很好
如果你想要更自由的捕捉,但仍然假设引用:
要提取匹配项: