我试图从输入字符串中提取某些模式。这些模式为+, - , *, / , (, ),
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)
的数字也混乱了。谢谢你的帮助!
答案 0 :(得分:3)
您可以使用
[+()*/-]|log|[0-9]*\\.?[0-9]+
请参阅regex demo
正则表达式包含在|
交替运算符的帮助下加入的3个备选方案。
[+()*/-]
- 匹配单个文字字符:+
,(
,)
,*
,/
,-
(请注意,连字符不会转义,因为它位于字符类的末尾)log
- 字母序列log
[0-9]*\\.?[0-9]+
- 一个浮点数,它接受.05
,5.55
之类的值,因为它匹配...
[0-9]*
- 0位或以上\\.?
- 和可选的(1或0)文字句号[0-9]+
- 1或更多数字炎。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