问题描述
我继承了一些DXL代码以截断对象号以排除最后的“ 0” 对于小于10(或两位数)的段落编号,此方法效果很好。我承认是DXL的新手,但是由于我对RegExp不熟悉,所以这段代码使我很困惑。我知道该论坛上的人员将对此进行研究并获得答案,然后我将学习并向前发展。 这是代码:
string s = number(obj)
Regexp paraNumExp = regexp2 "[0-9](\\.[0-9])*"
if(paraNumExp s) obj.attrDXLName = s[match 0]
delete paraNumExp
这是产生的东西: AbsNum,ObjNumber,DXL Attribute
string s = number(obj)
Regexp paraNumExp = regexp2 "[1-9](\\.[1-9])*"
if(paraNumExp s) obj.attrDXLName = s[match 0]
delete paraNumExp
(DXL)第2段
string s = number(obj)
Regexp paraNumExp = regexp2 "^[0-9]+\\.[0-9]+"
if(paraNumExp s) obj.attrDXLName = s[match 0]
delete paraNumExp
(DXL)第4段
Regexp reZero = regexp2 "(\\.0)-"
string s = number(obj)
if (reZero s) {
obj.attrDXLName = s[0:start 1-1]
}
delete reZero
解决方法
不太确定,您要完成什么,或者更深层的问题是什么。但是要回答您的“截断待处理零”问题,我建议在此处使用“开始”和“结束”方法,例如:
Regexp reZero = regexp2 "(\\.0)-"
Module m = current
filtering off
Object o
for o in m do {
string strON = number( o )
string strTruncated = strON
if (reZero strON) {
strTruncated = strON[0:start 1-1] "" strON[end 1+1:]
}
print "" identifier( o ) ": " strON " => '" strTruncated "'\n"
}
,
在您的帮助下以及同事的烦恼,我得到了所需的结果。 这是DXL代码:
// Define reZero to detect ".0-"
Regexp reZero = regexp2 "(\\.0)-"
// Get the Object Number
string s = number(obj)
if (reZero s) {
// Found ".0-"? Strip off ".0-" and all following that string
obj.attrDXLName = s[0:start 1-1]
} else {
// Did not find ".0-". Use complete object number.
obj.attrDXLName = s
}
delete reZero