-2

尝试从中检索值时遇到了正则表达式替换问题scala.util.matching.Regex。我在使用该方法时尝试了默认状态和unanchored初始化状态。findAllMatchIn

使用(1e)|(a1)带有示例文本的 regex 模式a1e,我希望收到1e,因为我已将其放置在第一个交替位置。我很困惑为什么我实际上收到的是第二个a1交替位置的值。

在查看了处理跨输入字符串的多个匹配项的许多问题之后,除了将它们按正确的顺序放置之外,我还没有找到任何解决如何处理交替的问题,我已经这样做了。

如果有的话,我可以使用什么方法来取回我想要的值1e,或者返回两个值,一个用于匹配的每个交替?

下面是我的 IntelliJ Scala 工作表中的代码示例(这里是 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)
4

1 回答 1

0

它返回"a1"是因为这是正则表达式引擎遍历字符串时遇到的第一个匹配项。

在这种情况下,您可以通过消极的前瞻来获得您想要的东西。

"(1e|a1(?!e))".r
              .findAllIn("a1e")
              .toList
//res0: List[String] = List(1e)

注意:"(a1(?!e)|1e)".r返回相同的结果。

于 2021-03-01T00:30:22.640 回答