我试图匹配以下字符串
"name type this is a comment"
名称和类型绝对存在。 评论可能存在也可能不存在。 我试图将其存储到变量n,t和c中。
val nameTypeComment = """^(\w+\s+){2}(?:[\w+\s*)*\(\,\,]+)"""
str match { case nameType(n, t, c) => print(n,t,c) }
这就是我所拥有的,但似乎并没有起作用。任何帮助表示赞赏。
val nameType = """^(\w+)\s+([\w\)\(\,]+)""".r
然而,当我尝试使用只有名称和类型的字符串而没有评论时,这是有效的,这是一组可能或不存在的单词。
答案 0 :(得分:0)
请注意^(\w+\s+){2}(?:[\w+\s*)*\(\,\,]+)
正则表达式在(\w+\s+)
块中定义3时只包含1个捕获组(match
)。
^(\w+)\s+([\w\)\(\,]+)
仅包含2个捕获组:(\w+)
和([\w\)\(\,]+)
。
要使代码正常工作,您需要定义3个捕获组。此外,不清楚分隔符是什么,让我假设前两个字段只是由1个或多个空格分隔的1个或多个字母数字/下划线符号。评论是2个第一个字段之后的任何内容。
然后,使用
val s = "name type this comment a comment"
val nameType = """(\w+)\s+(\w+)\s+(.*)""".r
val res = s match {
case nameType(n, t, c) => print(n,t,c)
case _ => print("NONE")
}
请参阅online demo
请注意,我们需要编译一个正则表达式对象,请注意正则表达式.r
之后的nameType
。
请注意,match
内的模式默认为锚定,字符串锚^
的开头可以省略。
此外,最好添加case _
以在未找到匹配项时定义行为。