2015-09-19 96 views
0

我有我的数据需要在各种其他应用程序进一步处理之前清理。在这个过程中,一个下游应用程序只允许一定范围的Unicode字符。以下是我用来去除无效的Unicode字符的正则表达式。无法去除无效的Unicode字符java

/[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/ 

但是,我仍然有问题让正则表达式在Java中工作。有没有特殊的方式来处理上述正则表达式,因为它包含一系列的Unicode字符?

UPDATE: 这是我的测试相同,似乎并没有得到它与@Andreas建议的工作方式:

public void testStripUnicode() { 
     String doc = "{\"fields\":{\"field1\":\"unicode char '\\u000b'\",\"field2\":[\"unicode char '\\u0003'\"]}}"; 
     String stripped = DocumentCleaner.clean(doc); 
     System.out.println(doc); 
     System.out.println(stripped); 
    } 

DOC
{"fields":{"field1":"unicode char '\u000b'","field2":["unicode char '\u0003'"]}} 剥离-doc的
{"fields":{"field1":"unicode char '\u000b'","field2":["unicode char '\u0003'"]}}

回答

0

应该没问题,只需放下斜杠/并加上反斜杠\

String regex = "[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]"; 
String stripped = value.replaceAll(regex, ""); 

或者,如果你反复做,可以解析正则表达式一次,前面:

// Prepare regular expression 
Pattern p = Pattern.compile("[^\\u0009\\u000a\\u000d\\u0020-\\uD7FF\\uE000-\\uFFFD]"); 

// Use regular expression 
String stripped = p.matcher(value).replaceAll(""); 
+0

尝试同样的。似乎没有工作。 –

+0

@AdiGuN测试字符串不包含您的正则表达式将剥离的任何字符 - 字符串文字“”\\ u0003“'是六个字符反斜杠,u,0003,而不是单个字符U + 0003。如果你想删除这些转义序列以及它们表示的字符,那么你需要一个不同的正则表达式。 –

+0

@IanRoberts你能否详细说明一下。正则表达式似乎在它前面包含^,所以\ u0003应该被剥离正确吗? –