【问题标题】:Android Studio Kotlin regex different than expectedAndroid Studio Kotlin 正则表达式与预期不同
【发布时间】:2018-11-09 14:24:55
【问题描述】:

我遇到了一个特定正则表达式的问题,它在 Android Studio 中运行时返回的值与预期不同。

场景:

代码很简单:

val regex = "(?<=N|E|\\G)\\d{2}(?=\\d*$)".toRegex()
print("${regex.findAll("N2032354345").count()}")

这应该打印 5,因为此字符串 (https://regex101.com/r/6PDbkI/1) 中有 5 个匹配项,如果我们在 Ideone.comKotlin Playground 中运行,则结果是预期的 5。

但是,在 Android Studio 中,结果为 1:

理论:

Android Studio 中的正则表达式似乎无法使用\G 运算符(可能与Kotlin split with regex work not as expected 有关)

有人遇到过同样的问题吗?有没有办法将正则表达式更改为在 Android Studio 中没有失败的类似正则表达式?我错过了一些设置吗?

【问题讨论】:

  • 对我来说听起来更像是一个错误,考虑到它在操场上运行良好
  • 这就是我的想法@Zoe。您是否知道报告此类问题的最佳地点是什么?
  • 这是正确的@WiktorStribiżew。但我正在为 Android Studio 开发,它不是返回 5,而是返回 1(这是 NOK)
  • 我认为您可以使用"(?&lt;=[NE]\\d{0,100})\\d{2}(?=\\d*$)" 之类的解决方法(您可以调整 100 的值)。
  • 我可以确认该workarround 工作@WiktorStribiżew。但它似乎是一个丑陋的:/

标签: android regex android-studio kotlin


【解决方案1】:

Android Pattern documentation\G 列为受支持的运算符:

\G    上一场比赛结束

因此,这听起来像是一个 Android Studio 错误。

在修复之前,您可以针对您的场景使用一种解决方法,该方案仅涉及输入中的十几个数字:

val regex = "(?<=[NE]\\d{0,100})\\d{2}(?=\\d*$)".toRegex()

模式匹配:

  • (?&lt;=[NE]\d{0,100}) - 紧跟在 NE 和 0 到 100 位数字前面的位置
  • \d{2} - 两位数
  • (?=\d*$) - 后面跟 0 个或多个数字到字符串的末尾。

【讨论】:

  • 感谢@WiktorStribiżew +1 拯救我的一天
猜你喜欢
  • 2019-02-03
  • 1970-01-01
  • 2018-06-04
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多