我如何指示 Scala 的正则表达式匹配器选择最左边的交替

问题描述

我在尝试从 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) 返回相同的结果。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...