在Scala中使用正则表达式进行分组和模式匹配
发布时间:2020-12-16 19:01:27 所属栏目:安全 来源:网络整理
导读:我需要使用正则表达式处理电话号码,并将其分组(国家代码)(区号)(号码).输入格式: 国家代码:1-3位数字 ????,区号:1-3位数 ????,数字:4-10位数 例子: 1 877 263827791-011-23413627 然后我需要打印出这样的组: CC=91,AC=011,Number=23413627 这是我到目
我需要使用正则表达式处理电话号码,并将其分组(国家代码)(区号)(号码).输入格式:
国家代码:1-3位数字 例子: 1 877 2638277 91-011-23413627 然后我需要打印出这样的组: CC=91,AC=011,Number=23413627 这是我到目前为止 String s = readLine val pattern = """([0-9]{1,3})[ -]([0-9]{1,3})[ -]([0-9]{4,10})""".r val ret = pattern.findAllIn(s) println("CC=" + ret.group(1) + "AC=" + ret.group(2) + "Number=" + ret.group(3)); 编译器说“空的迭代器”.我也试过: val (cc,ac,n) = s 那也没有.如何解决这个问题? 解决方法
问题在于你的模式.我建议使用一些像
RegexPal这样的工具来测试它们.将模式放在第一个文本框中,并在第二个文本框中提供示例.它将突出显示匹配的部分.
您在组和[ – ]分隔符之间添加了空格,并且期待空格.正确的模式是: val pattern = """([0-9]{1,10})""".r 另外,如果你想明确地获得组,那么你想获得一个Match返回.例如,findFirstMatchIn函数返回第一个可选匹配,或者findAllMatchIn返回匹配列表: val allMatches = pattern.findAllMatchIn(s) allMatches.foreach { m => println("CC=" + m.group(1) + "AC=" + m.group(2) + "Number=" + m.group(3)) } val matched = pattern.findFirstMatchIn(s) matched match { case Some(m) => println("CC=" + m.group(1) + "AC=" + m.group(2) + "Number=" + m.group(3)) case None => println("There wasn't a match!") } 我看到你也尝试将字符串解压缩成变量.您必须以下列方式使用正则表达式提取器: val Pattern = """([0-9]{1,10})""".r val Pattern(cc,n) = s println(s"CC=${cc}AC=${ac}Number=$n") 如果你想处理错误: s match { case Pattern(cc,n) => println(s"CC=${cc}AC=${ac}Number=$n") case _ => println("No match!") } 另外你还可以看一下string interpolation,使你的字符串更容易理解:s“…” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |