我有一个groovy脚本,它将一些格式很差的数据转换为XML。这部分工作得很好,但它也很高兴地传递了一些在XML中不合法的字符。所以我添加了一些代码来去掉这些,这就是问题的根源所在。
未编译的代码如下:
def illegalChars = ~/[\u0000-\u0008]|[\u000B-\u000C]|[\u000E-\u001F]|[\u007F-\u009F]/
我想知道的是,为什么?我在这里做错什么了?我在里面测试了这个regex
http://regexpal.com/
它按预期工作,但在groovy中编译它时出错:
[错误]生成错误
[信息]——————————————————————————————————————————————————————————————————————————————————————————————————————————————-
[信息]行23:26:意外字符:0x0
上面的行是
line 23
. 周围的行只是变量声明,我在使用regex时没有更改。
谢谢!
更新:
代码可以编译,但并不像我预期的那样进行过滤。
在regexpal中,我放置了regex:
[\u0000-\u0008\u000b-\u000c\u000e-\u001f\u007f-\u009f]
测试数据:
name='lang'>ECHEMICAL IMMUNOLOGY AND ALLERGY
72-883146.757500
name='pubc'>47
1NUMBERDvorak, A.KARGER
name='rr'>GBP013.51
1660-2242name='class1'>TS
Sname='class2'>616.079
Subcellular Localization of theCytokines, Basic Fibroblast Growth Factor and Tumor Necrosis Factor- in Mast
CellsRN170369808VOL 85
2005E
name='title'>CHEMICAL IMMUNOLOGY AND ALLERGY
name='page'>89-97
3146.757500name='pubc'>47
1这是从一个包含非法字符的文件中进行的抓取,所以有点随机。但是regexpal只突出显示了非法字符,但是在groovy中,它甚至用空字符串替换了“”字符,因此它基本上消灭了整个文档。
代码段:
def List parseFile(File file){
println "reading File name: ${file.name}"
def lineCount = 0
List data = new ArrayList()
file.eachLine {
String input ->
lineCount ++
String line = input
if(input =~ illegalChars){
line = input.replaceAll(illegalChars, " ")
}
Map document = new HashMap()
elementNames.each(){
token ->
def val = getValue(line, token)
if(val != null){
if(token.equals("ISSUE")){
List entries = val.split(";")
document.putAt("year",entries.getAt(0).trim())
if(entries.size() > 1){
document.putAt("volume", entries.getAt(1).trim())
}
if(entries.size() > 2){
document.putAt("issue", entries.getAt(2).trim())
}
} else {
document.putAt(token, val)
}
}
}
data.add(document)
}
println "done"
return data
}
我看不出这两个人有什么不同的行为;我是不是错过了什么?
再一次,谢谢!