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或更多数字[0-9]*
-和可选(1或0)文字句点\\.?
-1个或多个数字[0-9]+
结果:
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(", "))
}