输入中有以下字符串:
val str="11,FDESRTBGTY-DEDE-098-FDR,STR,5,1"
我想在scala中编写一个正则表达式来匹配它 我写了以下代码:
val regtest="""(11|12|13)(,+)(\S*)(,+)(\S*)(,+)(\d+)\)(,+)(\d+)\)""".r
stringin match {
case regtest(num,comma1,name,comma2,typein,comma3,number1,comma4,number2) =>name + "," + typein + "," + "," + number2
case _ => ""
}
我gt空字符串结果:""
或者想要的结果是:
val stringOut= "FDESRTBGTY-DEDE-098-FDR,STR,1"
任何有关请求的帮助 问候
答案 0 :(得分:0)
由于\)
,您的正则表达式不匹配,请将它们全部删除。您的输入字符串没有括号。此外,您希望在最后一个号码前只使用1个逗号,并且您希望得到number1
,而不是number2
作为结果中的最后一个值:
val regtest="""(11|12|13)(,+)(\S*)(,+)(\S*)(,+)(\d+)(,+)(\d+)""".r
str match {
case regtest(num,comma1,name,comma2,typein,comma3,number1,comma4,number2) =>println(s"${name},${typein},${number1}")
case _ => ""
}
请注意,如果您在字符串中只允许使用4个逗号,并且第2个和第3个值不能包含逗号,则"""(1[123])(,)([^\s,]*)(,)([^\s,]*)(,)(\d+)(,)(\d+)""".r
可能是更好的模式。另请注意,1[123]
是一种更有效,更紧凑的方式来编写(?:11|12|13)
。
或者,您可以使用
删除字符串中的第一个和最后一个以逗号分隔的项目str.replaceAll("^[^,]+,|(,[^,]+),[^,]+$", "$1")
此处,^[^,]+,
匹配字符串开头(,
)以外的^
以外的任何1个字符,然后是,
或(|
)将逗号和1+非逗号字符匹配并捕获到组1(带有(,[^,]+)
),然后是字符串末尾的最后,
和1+非逗号字符({{ 1}})匹配。删除所有匹配的文本,并使用[^,]+$
占位符将捕获组值粘贴回结果中。
请参阅Scala demo。