gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:07:30 25 4
gpt4 key购买 nike

我已经声明了这样一个正则表达式:"(^\\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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com