0

我想使用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#/])

扫描仪不会使用它在任何地方分割。

是否可以使用前瞻和后视以及如何做到这一点?

4

3 回答 3

3

你的语法有错误。首先?出现:

(?<=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(?<![A-Za-z0-9#/])(?=[A-Za-z0-9#/])
 ^^                                  ^^
于 2012-10-22T14:11:56.277 回答
1
new Scanner(...).useDelimiter(
  "(?<=[a-zA-Z0-9#/])(?=[^a-zA-Z0-9#/])|(?<=[^a-zA-Z0-9#/])(?=[a-zA-Z0-9#/])");
于 2012-10-22T14:17:13.687 回答
0

出什么问题了:

[^A-Za-z0-9#/]+

换句话说,集合中至少有一个字符不是您的单词集的任何运行

或者如果你需要空间

[^A-Za-z0-9#/ ]+

然后在扫描仪之后剥离空间进行特殊处理(如果需要)

于 2012-10-22T14:10:50.590 回答