另一个正则表达式问题

时间:2010-12-29 02:30:16

标签: java regex

如果我有文字

<page a>The cat ran#$(*#(%)#over(*@#$the(*#%

我正在使用扫描仪和useDelimiter方法,正则表达式允许我提取:

<page a>
The
cat
ran
over
the

到目前为止,我已经尝试过:

s.useDelimiter("[^a-zA-Z]|^(<.*>$)");

但这不会使尖括号保持完整,它会将它们取出(显然它与a-zA-Z相匹配。

2 个答案:

答案 0 :(得分:1)

您是否尝试过切换这两个选项?

s.useDelimiter("^(<.*>$)|[^a-zA-Z]");

答案 1 :(得分:1)

问题不在于分隔符,而在于它是令牌识别之一。你的代币是:

  • <page a>
  • The
  • cat
  • ran
  • over
  • the

编码“&lt;”分隔符集中任何位置的字符几乎确保它们不会在返回的标记中。如果你知道<page a>出现在某个字符串的开头(我意识到这可能是一个无效的假设),你可以这样做:

Scanner s = new Scanner(...);
s.useDelimiter("[^\\w]");
// Find an angle bracket token, if one is next.
String token = s.findInLine("<[^.]*>");
if (token != null)
    // process angle bracket token
token = s.next(); // get next delimited token
...

显然,这是一个快速的黑客(虽然我测试了它)。但我认为你可以轻松扩展它。