我在使用QRegExp从QString中删除表达式时遇到问题。我尝试了无数的正则表达无济于事。我做错了什么?
示例文本(QString myString)在此实例中,myString包含“\ u0006 \ u0007 \ u0013Hello”。
myString.remove(QRegExp("\\[u][0-9]{4}"));
它不会删除\ uXXXX的任何实例,其中X =数字。
然而,当我具体如:
myString.remove("\u0006");
确实删除了它。
答案 0 :(得分:0)
字符串文字并不总是与字符序列
相同for (char c : "\u0006\u0007\u0013Hello".toCharArray()) {
System.out.println( c + " (" + (int)c + ")" );
}
System.out.println( "--------------" );
for (char c : "\\u0006\\u0007\\u0013Hello".toCharArray()) {
System.out.println( c + " (" + (int)c + ")" );
}
在第一个示例中,\u0006
正在编码unicode代码点,而在第二个示例中,字符串实际上包含反斜杠。
字符串文字只存在于编译时,在运行时它们是字符序列。
正则表达式正在处理字符序列而不是字符串,而且间隙也有特殊含义,需要进行转义。
另请注意,\u0041
是另一种编码A
的方法。
也许您正在寻找的是unicode类别,也许以下可以提供帮助:
string.replaceAll( "\\p{Cc}", "" )