我想知道如何格式化这个表达式以在Java:[^#]+[#]
(一个或多个字符不是#后面跟着#(中工作
使用regexr.com(我最喜欢的regex工具(,这个表达式将从这个输入文本中获得以下匹配项:
输入:
aBc def AbC def dfe ABC
#
123
#
匹配:
aBc def AbC def dfe ABC
#
123
#
然而,当使用Scanner.next("[^#]+[#]")
时,我得到了InputMismatchException
,我认为它没有找到任何匹配?我需要转义字符吗?在C#中,我通常使用字符串文字@
来避免这个问题。
关于java Scanner和regex,我缺少什么?谢谢
我的解决方案是使用Pattern和Matcher类而不是扫描仪。scanner类在Stdin或字符串中的行为与预期不符,并且无法基于regex(使用hasNext(Regex)
和next(Pattern)
方法(获取匹配项。如果我读得更多,并发现为什么我会在这里发帖。
以下操作成功地从字符串中提取了每个单词(在本例中是一个连续的字母顺序(:
Pattern wordPattern = Pattern.compile("\p{Alpha}+");
Matcher wordFinder = wordPattern.matcher(lines.toString());
while (wordFinder.find()){
currentWord=wordFinder.group().toLowerCase();
AddWord(currentWord);
}
posix"\p{Alpha}+"
也可以用[a-zA-Z]+
代替