Regex scala正则表达式以匹配字符串中以制表符分隔的单词
我正在尝试匹配以下字符串Regex scala正则表达式以匹配字符串中以制表符分隔的单词,regex,scala,match,Regex,Scala,Match,我正在尝试匹配以下字符串 "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 na
"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
但是,当我试图只使用名称和类型的字符串,而不使用注释时,这种方法是有效的。注意^(\w++\s+{2}(?:[\w++\s*)*\(\,\,]+)
正则表达式只包含一个捕获组((\w++\s+
),而您在匹配块中定义了3个
^(\w+)\s+([\w\)\(\,]+)
仅包含两个捕获组:(\w+)
和([\w\)\(\,]+)
要使代码正常工作,需要定义3个捕获组。此外,还不清楚分隔符是什么,让我假设前两个字段只是由1个或多个空格分隔的1个或多个字母数字/下划线符号。注释位于前两个字段之后
然后,使用
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")
}
见
注意,我们需要编译一个regex对象,请注意regex模式nameType
之后的.r
请注意,默认情况下,匹配
中的模式被锚定,字符串锚定的开头可以省略
另外,最好添加case
来定义未找到匹配项时的行为。请注意^(\w+\s+{2}(?:[\w+\s*)*\(\,\,]+)
regex只包含1个捕获组((\w+\s+)
),而在匹配
块中定义3个
^(\w+)\s+([\w\)\(\,]+)
仅包含两个捕获组:(\w+)
和([\w\)\(\,]+)
要使代码正常工作,需要定义3个捕获组。此外,还不清楚分隔符是什么,让我假设前两个字段只是由1个或多个空格分隔的1个或多个字母数字/下划线符号。注释位于前两个字段之后
然后,使用
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")
}
见
注意,我们需要编译一个regex对象,请注意regex模式nameType
之后的.r
请注意,默认情况下,匹配
中的模式被锚定,字符串锚定的开头可以省略
此外,最好添加case\uu
来定义未找到匹配项时的行为。是否可以编辑您的问题以包含错误消息?为此,请尝试使用Regex。如果它们是真正的制表符分隔的,只需在\t
上进行split
即可。您可以编辑您的问题以包含错误消息吗?为此,请尝试使用Regex。如果它们确实是分开的,只需在\t
上进行拆分即可。非常感谢。你能解释一下([\w)(\,]+)是什么意思吗?你是说你的图案([\w)(\,]+)
部分吗?它匹配字符类中定义的一个或多个字符:单词字符(字母/数字/下划线)、(
,)
,或,
。这很有效。非常感谢。你能解释一下([\w)(\,]+)是什么意思吗?你是说你的图案([\w)(\,]+)
部分吗?它匹配字符类中定义的一个或多个字符:字字符(字母/数字/下划线)、(
,)
,或,
。