我想使用Scanner在字边界处拆分字符串。通常,这将是这样做的:
Scanner scanner = new Scanner(...).useDelimiter("\\b");
问题是我对“单词”字符的定义与标准[a-zA-Z_0-9]
略有不同,因为我想要包含更多字符并排除_
:[a-zA-Z0-9#/]
。因此,我无法使用\b
模式。
所以我尝试使用前瞻和后视来做同样的事情,但我提出的并不起作用:
(<?=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(<?![A-Za-z0-9#/])(?=[A-Za-z0-9#/])
扫描仪不会在任何地方拆分。
是否可以使用前瞻和后视以及如何做到这一点?
答案 0 :(得分:3)
语法错误。 ?
首先出现:
(?<=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(?<![A-Za-z0-9#/])(?=[A-Za-z0-9#/])
^^ ^^
答案 1 :(得分:1)
new Scanner(...).useDelimiter(
"(?<=[a-zA-Z0-9#/])(?=[^a-zA-Z0-9#/])|(?<=[^a-zA-Z0-9#/])(?=[a-zA-Z0-9#/])");
答案 2 :(得分:0)
出了什么问题:
[^A-Za-z0-9#/]+
换句话说,集合中至少有一个字符的运行不是你的单词集
或者如果你需要空格
[^A-Za-z0-9#/ ]+
然后在扫描仪(如果需要)
之后将空格去掉以进行特殊处理