我如何指示 Scala 的正则表达式匹配器 select 最左边的交替
How do I instruct Scala's regex matcher to select the leftmost alternation
我在尝试从 scala.util.matching.Regex
中检索值时遇到了正则表达式交替问题。我在使用 findAllMatchIn
方法时尝试了默认和 unanchored
初始化状态。
使用 (1e)|(a1)
的正则表达式模式和 a1e
的示例文本,我想接收 1e
因为 我已将它放在第一个交替位置。我很困惑为什么我实际上收到的是值 a1
而不是 ,它处于第二个交替位置 .
在查看了多个处理输入字符串中的多个匹配项的问题后,我没有找到任何解决 如何处理交替而不是按正确顺序排列的问题,我已经做到了。
我可以使用什么方法(如果有的话)来取回我想要的 1e
值,或者取回 returns 两个值,一个对应于它匹配的每个交替?
下面是我的 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)
它 returns "a1"
因为这是正则表达式引擎遍历字符串时遇到的第一个匹配项。
在这种情况下,您可以通过负向预测获得想要的结果。
"(1e|a1(?!e))".r
.findAllIn("a1e")
.toList
//res0: List[String] = List(1e)
注:"(a1(?!e)|1e)".r
returns结果相同
我在尝试从 scala.util.matching.Regex
中检索值时遇到了正则表达式交替问题。我在使用 findAllMatchIn
方法时尝试了默认和 unanchored
初始化状态。
使用 (1e)|(a1)
的正则表达式模式和 a1e
的示例文本,我想接收 1e
因为 我已将它放在第一个交替位置。我很困惑为什么我实际上收到的是值 a1
而不是 ,它处于第二个交替位置 .
在查看了多个处理输入字符串中的多个匹配项的问题后,我没有找到任何解决 如何处理交替而不是按正确顺序排列的问题,我已经做到了。
我可以使用什么方法(如果有的话)来取回我想要的 1e
值,或者取回 returns 两个值,一个对应于它匹配的每个交替?
下面是我的 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)
它 returns "a1"
因为这是正则表达式引擎遍历字符串时遇到的第一个匹配项。
在这种情况下,您可以通过负向预测获得想要的结果。
"(1e|a1(?!e))".r
.findAllIn("a1e")
.toList
//res0: List[String] = List(1e)
注:"(a1(?!e)|1e)".r
returns结果相同