返回不匹配的正则表达式 Scala 的第一个实例

return first instance of unmatched regex scala

提问人:hden 提问时间:6/25/2016 更新时间:6/25/2016 访问量:167

问:

有没有办法使用 Scala 的正则表达式库返回 2 个字符串之间不匹配字符串的第一个实例?

例如:

val a = "some text abc123 some more text"
val b = "some text xyz some more text"

a.firstUnmatched(b) = "abc123"
正则表达式 Scala

评论

0赞 hden 6/25/2016
文本事先不知道。有一个唯一的字符串对列表,我想通过这种函数来放置
0赞 hden 6/25/2016
我可能误会了你。我知道构造正则表达式的方法是做(这是特定于 scala 的方式)。但必须在某个时候定义。我不知道我的字符串中第一个不匹配的实例会在哪里或类似的东西。val regex = str.rstr
0赞 jpmc26 6/25/2016
实际上,我想我误解了这个问题。删除我的评论。对不起。
0赞 jpmc26 6/25/2016
听起来你想要一个解析器。首先必须对字符串进行标记化,然后必须分析标记以查看它们是否与法律顺序匹配。这意味着您必须构建一个词法分析器,然后构建一个解析器来分析标记。但是,即使这样也无法真正帮助您一路走来,因为在进入解析器阶段之前,词法分析器可能会出现问题。您必须将令牌一个接一个地流式传输到解析器中,并按顺序验证顺序。正则表达式只能告诉您“匹配”或“不匹配”。
0赞 Victor Moroz 6/25/2016
也许的一些变化?a.split(" ").zip(b.split(" ")).dropWhile { case (a, b) => a == b }.head._1

答:

1赞 LukStorms 6/25/2016 #1

正则表达式适用于基于模式的字符串匹配和替换。
但是要寻找字符串之间的差异?不完全是。

但是,可用于查找差异。diff

object Main extends App {
  val a = "some text abc123 some more text 321abc"
  val b = "some text xyz some more text zyx"
  val firstdiff = (a.split(" ") diff b.split(" "))(0)
  println(firstdiff)
}

打印“ABC123”

正则表达式到底是需要的吗?然后意识到拆分可以用正则表达式匹配来代替。
此示例中的正则表达式模式查找单词:

  val reg = "\\w+".r
  val firstdiff = (reg.findAllIn(a).toList diff reg.findAllIn(b).toList)(0)