问题描述
我在尝试从 scala.util.matching.Regex
检索值时遇到了正则表达式交替问题。我在使用 unanchored
方法时尝试了默认和 findAllMatchIn
初始化状态。
使用 (1e)|(a1)
的正则表达式模式和 a1e
的示例文本,我想收到 1e
因为我已经将它放在第一个交替位置 .我很困惑为什么我实际上收到了值 a1
而不是 它在第二个交替位置。
在查看了处理输入字符串中多个匹配项的许多问题后,我没有找到任何该地址除了将它们按正确顺序排列之外如何处理交替,我已经做了。
我可以使用什么方法(如果有)来取回我想要的 1e
值,或者返回两个值,一个对应于它匹配的每个交替?
以下是我的 IntelliJ Scala 工作表 (here's the code in Scastie) 中的代码示例:
import scala.util.matching.Regex
val regexStringLongOrLat: String =
"""(1e)|(a1)"""
val regexLongOrLat: Regex = regexStringLongOrLat.r.unanchored
val sample =
"a1e"
val test2 =
regexLongOrLat
.findAllMatchIn(sample)
.toList
println(test2) //This should return List(1e)
解决方法
它返回 my
因为这是正则表达式引擎遍历字符串时遇到的第一个匹配项。
在这种情况下,您可以通过负面预测得到您想要的东西。
"a1"
注意:"(1e|a1(?!e))".r
.findAllIn("a1e")
.toList
//res0: List[String] = List(1e)
返回相同的结果。