cloudroam
2025-03-31 731667db1ac658a6f6064ef328d04eb1d47c20ff
app/src/main/java/com/example/firstapp/entity/Rule.kt
@@ -1,17 +1,77 @@
package com.example.firstapp.entity
data class Rule(var type: String,var content: String ,var reg: String) {
import java.time.LocalDateTime
    // 在 Rule 类中定义提取方法
    fun extractCodeFromMessage(message: String): String? {
        // 如果 message 包含 content
        if (message.contains(content)) {
            // 使用 reg 作为正则表达式进行匹配
            val regex = reg.toRegex()
            val matchResult = regex.find(message)
            return matchResult?.value  // 如果找到匹配的内容,则返回
        }
        return null  // 如果不匹配,返回 null
class Rule(
    val type: String,
    val content: String,
    val pattern: String
) {
    // 添加伴生对象存储多个正则表达式模式
    companion object {
        private val BANK_PATTERNS = mapOf(
            "招商银行" to listOf(
                // 第一种格式:账单¥xxx,还款日MM月dd日
                "账单[¥¥](\\d+\\.?\\d*).*还款日(\\d{2})月(\\d{2})日",
                // 第二种格式:账单金额xxx,还款日MM月dd日
                "账单金额[::](\\d+\\.?\\d*).*还款日[::](\\d{2})月(\\d{2})日",
                // 可以继续添加其他格式...
            ),
            "中国银行" to listOf(
                "账单金额[::](\\d+\\.?\\d*).*还款日[::](\\d{1,2})日",
                // 可以添加其他格式...
            ),
            // 其他银行的模式...
        )
    }
    fun extractCodeFromMessage(message: String): String? {
        if (type == "财务") {
            // 获取该银行的所有正则表达式模式
            val patterns = BANK_PATTERNS[content] ?: listOf(pattern)
            // 尝试每一个正则表达式
            for (pat in patterns) {
                val regex = pat.toRegex()
                val matchResult = regex.find(message)
                matchResult?.let {
                    if (it.groupValues.size > 1) {
                        return it.groupValues[1].replace("[¥¥]".toRegex(), "")
                    }
                }
            }
            return null
        } else {
            // 非财务类型的处理保持不变
            val regex = pattern.toRegex()
            val matchResult = regex.find(message)
            return matchResult?.value
        }
    }
    fun extractDueDate(message: String): String? {
        if (type != "财务") return null
        val patterns = BANK_PATTERNS[content] ?: listOf(pattern)
        for (pat in patterns) {
            val regex = pat.toRegex()
            val matchResult = regex.find(message)
            matchResult?.let {
                when {
                    content == "招商银行" && it.groupValues.size > 3 -> {
                        return "${it.groupValues[2]}月${it.groupValues[3]}日"
                    }
                    it.groupValues.size > 2 -> {
                        return it.groupValues[2] + "日"
                    }
                    else -> {}
                }
            }
        }
        return null
    }
}