如果我想将扫描仪的分隔符设置为scanner.useDelimiter("\\p{Punct}");
但不希望引号包含在该列表中,是否有一种简单的方法可以将其排除?
我尝试s.useDelimiter("(\\p{Digit}|\\s|\\p{Punct}&&[^"])+");
,但括号中的引号正在关闭引号。
答案 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}&&[^"]]
(字符串文字的转义,正常情况下)。