Regex 正则表达式:在Scala中匹配并标记

Regex 正则表达式:在Scala中匹配并标记,regex,scala,Regex,Scala,我试图从输入字符串中提取某些模式。这些模式是+,-,*,/,(,),日志,整数和浮点数 以下是所需行为的示例: //input string var str = "log6*(12+5)/2-34.2" //wanted result var rightResp = Array("log","6","*","(","12","+","5",")","/","2","-","34.2") 我已经尝试这么做了一段时间,但我不得不承认正则表达式不是我的专长。下一段代码显示了我的困境: import

我试图从输入字符串中提取某些模式。这些模式是
+,-,*,/,(,),
日志
整数
浮点数

以下是所需行为的示例:

//input string
var str = "log6*(12+5)/2-34.2"

//wanted result
var rightResp = Array("log","6","*","(","12","+","5",")","/","2","-","34.2")
我已经尝试这么做了一段时间,但我不得不承认正则表达式不是我的专长。下一段代码显示了我的困境:

import scala.util.matching.Regex

var str = "log6*(12+5)/2-34.2"

val pattern = new Regex("(\\+|-|log|\\*|\\/|[0-9]*\.?[0-9]*)")

pattern.findAllIn(str).toArray
结果不好,因为括号“
”和“
”和数字都不匹配,
整数(6,12,5,2)
浮点(34.2)
都出错。谢谢你的帮助

您可以使用

[+()*/-]|log|[0-9]*\\.?[0-9]+

正则表达式包含3个通过
|
alternation操作符连接的可选项

  • [+()*/-]
    -匹配单个文字字符:
    +
    *
    /
    -
    (请注意,连字符在字符类末尾时不会转义)
  • log
    -文字字母序列
    log
  • [0-9]*\\.?[0-9]+
    -一个浮点数,它在匹配时接受
    .05
    5.55
    等值。。。
    • [0-9]*
      -0或更多数字
    • \\.?
      -和可选(1或0)文字句点
    • [0-9]+
      -1个或多个数字
以下是一份:


结果:
log,6,*,(,12,+,5,),/,2,-,34.2

试试。@stribizev非常感谢!如果您将其作为答案发布,我将很乐意投票并接受您的答案。如果您需要添加更多单字符支持,请将其添加到字符类中(只有
[
]
必须在那里转义)。如果您需要支持更多序列,请使用
|
交替运算符添加它们。如果
str
改为
“log6*(-12+5)/2-34.2”
?@grubjesic:这是否在您的问题范围内?
import scala.util.matching.Regex
object Main extends App {
   var str = "log6*(12+5)/2-34.2"
   val pattern = new Regex("[+()*/-]|log|[0-9]*\\.?[0-9]+")
   val res = pattern.findAllIn(str).toArray
    println(res.deep.mkString(", "))
}