【问题标题】:Scala: Regex of finding max string not ending with certain StringScala:查找最大字符串的正则表达式不以某些字符串结尾
【发布时间】:2018-02-26 09:14:55
【问题描述】:

给定一个字符串,我需要找出最大的字符串开头,它包含原始字符串中的anything,但在看到定义的模式时停止。 p>

例如,给定“\nwww.{Google}.comxxxcom”作为字符串,“com”作为结束模式,

我们想要“\nwww.{Google}”。结果。

我试图做类似的事情

val filter = """[\\s\\S]*(?!com)""".r
filter.findAllIn("\nwww.{Google}.com").toArray

但结果不是我想要的。

我也尝试了其他可能性,但失败了。有人可以帮忙吗?

【问题讨论】:

  • 它在我的示例中有效,但如果给定的字符串是“xxxcomcom”,那么结果将是“xxxcom”,它仍然包含禁止模式...
  • 那你需要一个惰性量词,"""[\s\S]*?(?=com)""".r
  • 它得到了想要的答案,但在某些情况下会有一些空字符串。有什么方法可以摆脱它们?
  • 能否请您发布一个具有预期输出的示例字符串?
  • 当输入String为"xxcomcom{com"时,得到的Array为Array(xx, "", om, "", om{, "") 3个空String元素。

标签: java regex scala


【解决方案1】:

你可以使用

val filter = """^[\s\S]+?(?=com)""".r
val s = "\nwww.{Google}.comcomxxxcom"
print(filter.findFirstIn(s))
// => Some(
www.{Google}.)

Scala demo

详情

  • ^ - 字符串锚的开始
  • [\s\S]+? - 第 1 组:任何 1+ 个字符,尽可能少,直到第一个
  • com - 匹配并消费。

请注意,由于您需要一个字符串中的单个匹配项,因此您可以使用 findFirstIn 而不是 findAllIn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多