简体   繁体   English

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

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

I am developing a scala project. 我正在开发一个scala项目。 In fact, I should create some commands like CLI commands. 实际上,我应该创建一些命令,例如CLI命令。 For example: exit, help, load filename, find name. 例如:退出,帮助,加载文件名,查找名称。 And I want to handle these commands with regex pattern matching. 我想用正则表达式模式匹配来处理这些命令。 But I have some problems. 但是我有一些问题。 If string is "load filename", the filename can be handle. 如果字符串是“加载文件名”,则可以处理文件名。 However if string is "load filename1 filename2", I can not handle filename1 and filename2 together. 但是,如果字符串是“ load filename1 filename2”,则无法一起处理filename1和filename2。

My code is as follow: 我的代码如下:

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

I want to print all filename if n filenames. 如果n个文件名,我想打印所有文件名。 How can I proceed? 我该如何进行?

I think you can first capture filenames with: 我认为您可以先使用以下命令捕获文件名:

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

DEMO 演示

and then split() captured group with \\s , " " or other character you find valid in your project. 然后使用\\s ,“”或您认为在项目中有效的其他字符split()捕获组。

I'm not sure how it works in Scala, but I would also try with: 我不确定它在Scala中如何工作,但我也可以尝试:

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

DEMO 演示

witch use \\G boudary, which match only after previus match. 巫婆使用\\G boudary,仅在之前的匹配之后才匹配。 I think you would be able to get all filenames separetly. 我认为您将能够分别获取所有文件名。

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

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