android - Kotlin正则表达式不适用于我在运行时得到的波兰char (“ł”)

标签 android regex kotlin

我已经声明了这样一个正则表达式:"(^\\d{1,}\\,\\d{2}|^0) zł$"
不幸的是,它不匹配低于值(但应该匹配)
508,00 zł
注意1:我发现,问题可能出在ł字符上

注意2:问题是,我从API获取此String并在运行时检查它(它具有我所描述的确切值)

注意3:我还尝试在调试器评估中手动匹配我的模式(当我刚刚手动输入“508,00zł”时)并且它匹配了。不幸的是,我得到的字符串本身在运行时不匹配。可能是什么问题?

码:

val value = getFromApi() // 508,00 zł
val regex = "(^\\d{1,}\\,\\d{2}|^0) zł$".toRegex()
regex.matches(value) // returns false

最佳答案

此处的字母ł并不是罪魁祸首,因为它有一个Unicode表示形式。

最常见的问题是空格:它可以是那里的任何Unicode空格,从它的外观来看,您永远无法分辨。

要匹配任何ASCII空格,您可以使用 \s 。在这里,您有这种空白,因此我在问题下方的最高注释对您有用。

要匹配任何Unicode空格,您可以使用 \p{Z} 来匹配任何一个空格字符,或者使用\p{Z}*来匹配0个或多个它们的出现:

val value = "508,00 zł"
val regex = """^(\d+,\d{2}|0)\p{Z}zł$""".toRegex()
// val regex = """^(\d+,\d{2}|0)\p{Z}*zł$""".toRegex()
println(regex.matches(value)) // => True

参见Kotlin demo

另外,请注意使用原始字符串文字(用三重双引号分隔),它们允许使用单个反斜杠作为正则表达式转义字符。

注意{1,}与匹配1个或多个重复的+量词相同。

关于android - Kotlin正则表达式不适用于我在运行时得到的波兰char (“ł”),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61944612/

相关文章:

安卓图表引擎 : customising graph?

android - built_value 与 flutter_test 存在依赖冲突

c# - 阿拉伯语问题 将 أً 替换为 ا

spring-boot - 如何使用 kotlin.logging 记录堆栈跟踪?

java - 如何将此更改日志库添加到 Eclipse 中当前的 Android 项目中?

javascript - ListView 问题 "cannot resolve constructor arrayadapter anonymous"

regex - postgresql posix 正则表达式

java - 正则表达式,引号之间的值

kotlin - 使用Release构建变体进行构建时,Kotlin找不到Dagger组件

java - 如何解决 HttpURLConnection 上的 NullPointerException?