我试图从输入字符串中提取某些模式。这些模式+, - , *, / , (, ),
log
,integer
和float numbers
。
这是所需行为的示例:
//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
结果不佳,原因是括号“ (
”和“ )
”以及数字integer(6,12,5,2)
和float(34.2)
都没有匹配。谢谢你的帮助!
您可以使用
[+()*/-]|log|[0-9]*\\.?[0-9]+
regex包含3个替代方法,这些|
替代方法是通过alter运算符加入的。
[+()*/-]
-匹配单个文字字符:+
,(
,)
,*
,/
,-
(注意,连字符没有逃脱,因为它是在字符类的结尾)log
-文字字母序列 log
[0-9]*\\.?[0-9]+
-一个浮点数,它接受与之匹配的值.05
,5.55
如...
[0-9]*
-0或更多数字\\.?
-和可选(1或0)立即数[0-9]+
-1个或多个数字。这是一个Scala代码示例:
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(", "))
}
结果: log, 6, *, (, 12, +, 5, ), /, 2, -, 34.2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句