android - Kotlin 正则表达式不适用于我在运行时获得的波兰字符(“ł”)
问题描述
我已经声明了这样的正则表达式:
"(^\\d{1,}\\,\\d{2}|^0) zł$"
不幸的是,它不匹配低于值(但它应该)
508,00 zł
注意1:我发现问题可能出在ł
角色上
注意 2:问题是,我从 API 获取此字符串并在运行时检查它(它具有我描述的确切值)
注意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
另外,请注意使用原始字符串文字(用三个双引号分隔),它们允许使用单个反斜杠作为正则表达式转义字符。
注意与匹配 1 个或多个重复的量词{1,}
相同。+
推荐阅读
- firebase - fcm xmpp 协议“delivery_receipt_requested”参数
- electron - 从 Electron autoUpdater 获取发行说明
- mongodb - setDate 没有在批处理脚本的 eval 中正确设置日期
- java - 在java中,有没有办法在线程进入等待状态而不是完成后“加入”线程?
- c# - 为什么调试模式不能保证任务的完成(.net core,C#)
- python - 在python中解析xsd
- java - 如何获取包含哪些内容的JFrame对象?
- c# - 使用我的 VS C# 项目中的 http-server (node.js) 连接到在 localhost 上提供的 SQLite .db 文件?
- tinymce - 是否有任何插件或代码可以为 TinyMCE 添加占位符模板?
- arduino - 两个 ESP8266 使用 WiFiESP.h 与 udp 通信