我错误地完成了数据处理工作和非转义数据。它取代了所有utf-8,如\x0a\xfa to x0axfa
我想写一个正则表达式将\
放回x之前。我试过这个:
`regex:((\([\x00-\x7F]\)|\w){2})+`
replace with: \\$1
但是,它会使用\
替换最后2个字符前的所有内容。什么是解决这个问题的正确方法。 (我必须做正则表达式替换,不能再做数据处理。它很大。)
输入:blah blah x0ax0fx12 ...
所需输出:blah blah \ x0a \ x0f \ x12 ...
答案 0 :(得分:1)
使用后面的方法来防止转义已转义的内容,并提前查找斜杠的插入点:
popen(("zcat " + filename).c_str(), "rb")
Java正则表达式中的文字反斜杠需要四重反斜杠;为正则表达式转义一次,然后再为字符串文字转义。
答案 1 :(得分:0)
在这种情况下,我会使用像(x[0-9A-Fa-f]{1,4})+
这样的表达式来识别每行没有反斜杠的UTF-8数据块。
从那里,您可以使用Java的string.split(" x")来创建一个字符串数组,表示没有" x"的字节。如果regexMatch
是一个包含表达式匹配的字符串,例如" x0ax0fx12",那么您可以执行以下操作:
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]) {
String inputText = "blah blah x0ax0fx12 blah blah";
String regexMatch = "";
Pattern pattern = Pattern.compile("(x[0-9A-Fa-f]{1,4})+");
Matcher matcher = pattern.matcher(inputText);
if (matcher.find()) {
regexMatch = matcher.group(0);
}
String replacedOutput = "";
for (String splitStr : regexMatch.split("x")) {
if (!splitStr.equals("")) {
replacedOutput += "\\x" + splitStr;
}
}
System.out.println(replacedOutput);
}
}
这应输出" \ x0a \ x0f \ x12"并且您应该能够将其替换回匹配在您的文件中匹配的行,在匹配器找到它的位置。