有一个数字,格式为DDDDDRRRPC。有必要在C,P,RRR和DDDDDD部分上将其分开。我不确定,但是在Java上看起来像这样
sed 's/\(.*[0-9]\)\S\+/\1/' file
这如何在Groovy上完成?
答案 0 :(得分:0)
您可以将正则表达式与Groovy的multiple assignment operator配合使用以简化代码。考虑以下示例:
import java.util.regex.Pattern
try {
String U_id_str = "2100304213"
Pattern pattern = Pattern.compile(/^([0-9]{5})([0-9]{3})([0-9])([0-9])$/)
def (_, birthNum, pNum, gend, kNum) = (U_id_str =~ pattern)[0]
println "birthNum = ${birthNum}, pNum = ${pNum}, gend = ${gend}, kNum = ${kNum}"
} catch (IndexOutOfBoundsException ex) {
println "Input string does not match regular expression..."
}
在此示例中,我们使用模式^([0-9]{5})([0-9]{3})([0-9])([0-9])$
,该模式定义了初始数字的4个部分(表示为字符串)。在第四行,我们使用=~
运算符测试输入字符串是否匹配给定模式,该运算符返回java.util.regex.Matcher
对象,并将每个匹配部分分配给变量birthNum
,pNum
,{{1 }}和gend
。出于安全原因,我们在try-catch块中执行此代码,因为如果输入字符串与给定模式不匹配,kNum
可能会抛出(U_id_str =~ pattern)[0]
。
最后但并非最不重要的一点-请记住,匹配器将匹配的部分作为字符串返回,因此,如果要将这些变量传递给期望例如IndexOutOfBoundsException
,您必须使用Integer
明确地投射它们。
输出:
Integer.valueOf(...)