如何将分隔符设置为" \\ p {Punct}"不包括引号?

时间:2015-03-30 20:08:45

标签: java parsing java.util.scanner delimiter

如果我想将扫描仪的分隔符设置为scanner.useDelimiter("\\p{Punct}");但不希望引号包含在该列表中,是否有一种简单的方法可以将其排除?

我尝试s.useDelimiter("(\\p{Digit}|\\s|\\p{Punct}&&[^"])+");,但括号中的引号正在关闭引号。

2 个答案:

答案 0 :(得分:3)

您可以调用方法Scanner#useDelimiter(Pattern)

scanner.useDelimiter(Pattern.compile("[\\p{Punct}&&[^\"]]"))

[[\\p{Punct}&&[^\"]]匹配\\p{Punct}所涵盖的所有字符,但已转义的双引号除外。

答案 1 :(得分:1)

这称为Character Class Subtraction,请参阅Java Trail: [Regular Expression] Character Classes

  

最后,您可以使用减法来否定一个或多个嵌套字符类,例如[0-9&& [^ 345]]。此示例创建一个匹配0到9之间的所有字符类,但数字3,4和5除外。

对于给定的请求,这是模式[\p{Punct}&&[^"]](字符串文字的转义,正常情况下)。