繁体   English   中英

如何处理(\\ w +)+? 正则表达式作为模式匹配scala中的字符串列表

[英]How to handle (\w+)+? regex as string list in pattern matching scala

我正在开发一个scala项目。 实际上,我应该创建一些命令,例如CLI命令。 例如:退出,帮助,加载文件名,查找名称。 我想用正则表达式模式匹配来处理这些命令。 但是我有一些问题。 如果字符串是“加载文件名”,则可以处理文件名。 但是,如果字符串是“ load filename1 filename2”,则无法一起处理filename1和filename2。

我的代码如下:

val help = """help""".r
val exit = """exit""".r
val load = """load(\s+\w+)+?\s*""".r
val find = """findbyName(\s+\w+)+?\s*""".r

val input = "load filename1"
 input match {
    case help() => println("help")
    case exit() => println("exit)
    case load(filename) => println(filename)
    case find(name) => println(name)
    case _ => println "error"
  }

***********************
console: filename1

如果n个文件名,我想打印所有文件名。 我该如何进行?

我认为您可以先使用以下命令捕获文件名:

load\s((?:\w+\s?)+)

演示

然后使用\\s ,“”或您认为在项目中有效的其他字符split()捕获组。

我不确定它在Scala中如何工作,但我也可以尝试:

load\s(\w+\s?)|(?<=\G)(\w+)\s?

演示

巫婆使用\\G boudary,仅在之前的匹配之后才匹配。 我认为您将能够分别获取所有文件名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM