regex - 使用 Matcher 提取子字符串:java.lang.IllegalStateException: No match found
问题描述
我正在尝试使用正则表达式从给定字符串中提取子字符串。我在 Scala 中这样做:
val pattern = Pattern.compile("(Word)+")
val matcher = pattern.matcher("WordWordRestOfString")
matcher.group(1)
所需的输出是“WordWord”,但是,我不断收到 IllegalStateException。我以前没有真正使用过 Regex,也无法完全掌握 matcher.group 方法的工作原理,但我看到了建议使用 matcher.group(1) 的问题的答案。
解决方案
首先,重复捕获组仅将最后捕获的值保留在组内存缓冲区中,因此您仅获得第 1 组值也就不足为奇了Word
。请参阅重复捕获组与捕获重复组。
其次,您实际上并没有调用实际触发正则表达式搜索的匹配器.find
或方法。.matches
第三,这里不需要获取 Group 1 的值,只需要获取全匹配即可:
val s = "WordWordRestOfStringWordWordWord"
val pattern = "(Word)+".r
// Single result:
val result = pattern.findFirstMatchIn(s).get
println(result) // => WordWord
// Multiple results:
val multiple_results = pattern.findAllMatchIn(s)
println(multiple_results.mkString(", ")) // => WordWord, WordWordWord
查看Scala 演示
推荐阅读
- reactjs - 使用 jest 进行测试时反应钩子未设置状态
- ray - 在光线设置期间激活 Conda 环境
- nix - 为什么在使用`callCabal2Nix`时应该由nix提供这些依赖项时,cabal会构建这些依赖项?
- sql - 按净收入而不是订单日期汇总员工?
- ruby-on-rails - Elasticsearch 匹配字段=值(不包含)
- scala - Scala - 如何在理解块中使用 foreach 循环?
- twitter-bootstrap - 通过 @use 而不是 @import 将 Bootstrap 导入我的 SCSS 会导致问题
- go - 范围在结构的切片上
- html - 角度清除表格问题的可编辑字段
- matlab - 在 Matlab 中用 ODE45 求解一个微分方程组