Regex 将数字序列映射到Scala中的单个字符

Regex 将数字序列映射到Scala中的单个字符,regex,string,scala,Regex,String,Scala,给定一个输入字符串,将字符串中包含的三种可能的数字序列映射为一个数字,并保持字符串的其他元素不变: 单个数字应映射到字符1:“help3me”->“help1me” 一行中的两个数字应该映射到字符2:“help18me”->“help2me” 一行中的三个或更多数字应映射为3:“test3432help234312me”->“Test3HelpP3ME” 我们的输入字符串可以包含任意数量的1,2,3+长度的数字序列,因此有效的输入示例是“help3490897test73me23435pleas

给定一个输入字符串,将字符串中包含的三种可能的数字序列映射为一个数字,并保持字符串的其他元素不变:

  • 单个数字应映射到字符1:“help3me”->“help1me”

  • 一行中的两个数字应该映射到字符2:“help18me”->“help2me”

  • 一行中的三个或更多数字应映射为3:“test3432help234312me”->“Test3HelpP3ME”

    我们的输入字符串可以包含任意数量的1,2,3+长度的数字序列,因此有效的输入示例是“help3490897test73me23435please5”

    在Scala中,解决上述问题的有效方法是什么?它是否只涉及将三种可能的情况作为正则表达式枚举


  • 使用正则表达式和方法
    replaceAllIn
    。第二个参数是获取对象并将其转换为其长度的函数

    val str =  "help3me34"
    val expr = "(\\d+)".r
    expr.replaceAllIn(str, x => (x.group(0).length min 3).toString)
    res2: String = help1me2
    

    这看起来不是一个真正的实际问题,而是某种测试或家庭作业。问这个问题本身没有问题,只要包括对原文的引用,并标记问题,例如,用“家庭作业”标记。大于3的所有内容都应该是3,所以应该是:
    x=>(x.group(0)。length min 3)。toString
    哦,是的,我没有仔细阅读问题。谢谢!无论如何,我希望老师会问他关于有限自动化的问题,这个答案对他没有多大帮助:)我明白你的意思,但别忘了,大多数是真正的专业程序员经常使用有限自动化。因此,在大学/学校学习一点关于如何使用So的知识并没有坏处。