我有一个程序,使用ML Kit在文档上使用文本识别,我获取数据,只打印价格.因此,我获取文本识别字符串,并将其传递给下面的正则表达式:

val reg = Regex("\$([0-9]*.[0-9]{2})")
    val matches = reg.findAll(rec)
    val prices = matches.map{it.groupValues[0]}.joinToString()
recogResult.text = prices 

我在另一个网站上测试了Regex公式,它获取了所有正确的数据.但它什么也没印.当它到达注册时.findAll(rec)零件匹配=kotlin.sequences.GeneratorSequence@bd56ff3,价格=".

推荐答案

你可以用

val reg = Regex("""\$[0-9]*\.[0-9]{2}""")
val matches = reg.findAll("Price: \$1234.56 and \$1.56")
val prices = matches.map{it.groupValues[0]}.joinToString()

online demo.Notes:

  • """..."""是一个三引号字符串文字,其中反斜杠被解析为文字\个字符,不用于形成字符串转义序列
  • \$-在三引号字符串中,literal定义一个\$正则表达式转义,它与literal $字符匹配
  • [0-9]*\.[0-9]{2}匹配零个或多个数字,.和两个数字.

请注意,您可以使用\p{Sc}来匹配任何货币字符,而不仅仅是$.

如果你想确保这两个小数后面没有其他数字,在正则表达式末尾加(?![0-9]).

Kotlin相关问答推荐

Kotlin异步不并行运行任务

Kotlin接口方法默认值&;可传递依赖项

使用调度程序运行异步 Kotlin 代码

Kotlin中用于调用常量名称的枚举类方法之间的区别

如何为 Kotlin 中的每个循环设置以避免越界异常

如何创建扩展函数isNullOrEmpty?

Saripaar formvalidation 在 kotlin 中第二次不起作用

SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加com.fasterxml.jackson.module: jackson-module-kotlin

在 Kotlin 中使用 @Parcelize 注释时如何忽略字段

比较 Kotlin 中的可比对象列表

如何设置两列recyclerview?

在用Kotlin编写的Android库公共API中处理R8+JvmStatic Annotation+Lambda

Android Studio 将 Java 转换为 Kotlin 错误无法推断此参数的类型

用Gradle Kotlin DSL构建源jar?

Kotlin lambda 语法混淆

这是 Kotlin 中的错误还是我遗漏了什么?

Mocked suspend函数在Mockito中返回null

具有泛型param的Kotlin抽象类和使用类型param的方法

Kotlin:访问 when 语句的参数

Kotlin - 为什么我会得到 KotlinNullPointerException