我想对Scala中的字符串进行一些处理。第一阶段是查找文章索引,例如:"A "
," A "
,"a "
," a "
。我想这样做:
"A house is in front of us".indexOfSlice("\\s+[Aa] ")
我认为这应该返回0
,因为子字符串首先在字符串的第一个位置匹配。
但是,这会返回-1
。
为什么会返回-1
?正在使用的正则表达式是不正确的?
答案 0 :(得分:3)
我输入的其他答案只是忽略了这一点。您的问题是indexOfSlice
没有采用正则表达式,而是序列中的子序列。所以修复正则表达式根本没有帮助。
试试这个:
val pattern = "\\b[Aa]\\b".r.unanchored
for (mo <- pattern.findAllMatchIn("A house is in front of us, a house is in front of us all")) {
println("pattern starts at " + mo.start)
}
//> pattern starts at 0
//| pattern starts at 27
(也有固定的正则表达式)
编辑:针对"\\s*[Aa] "
val pattern2 = "\\s*[Aa] ".r.unanchored
for (mo <- pattern2.findAllMatchIn("The agenda is hidden")) {
println("pattern starts at " + mo.start)
}
//> pattern starts at 9
答案 1 :(得分:0)
我在你的正则表达式中看到了一个错误。你的正则表达式正在搜索
但是您匹配的字符串并不包含开头的空格。这就是为什么它没有给你索引0但是-1。
您可以将您的正则表达式编写为"^\\s*[Aa] "
以下是示例:
val text = "A house is in front of us";
val matcher = Pattern.compile("^\\s*[Aa] ").matcher(text)
var idx = 0;
if(matcher.find()){
idx = matcher.start()
}
println(idx)
它应该按预期返回 0 。