我正在处理一些带有类似
语句的java代码String tempAttribute = ((String) attributes.get(i)).replaceAll("\\p{Z}","")
我不习惯正则表达式,所以它的含义是什么? (如果你能提供一个网站来学习那些非常棒的正则表达式的基础知识)我已经看到了像
那样的字符串 ept as y
它会转变为eptasy
,但这似乎并不合适。我相信写这篇文章的人想要修剪前导空格和尾随空格。
答案 0 :(得分:12)
删除所有空格(用空字符串替换所有空格匹配)。
regular-expressions.info提供了一个精彩的正则表达式教程。 引用from this site:
\ p {Z}或\ p {Separator}:任何类型的空格或不可见的分隔符。
答案 1 :(得分:4)
OP表示代码片段是Java。评论声明:
\ p {Z}或\ p {Separator}:任何类型的空格或不可见的分隔符。
下面的示例代码显示这不适用于Java。
public static void main(String[] args) {
// some normal white space characters
String str = "word1 \t \n \f \r " + '\u000B' + " word2";
// various regex patterns meant to remove ALL white spaces
String s = str.replaceAll("\\s", "");
String p = str.replaceAll("\\p{Space}", "");
String b = str.replaceAll("\\p{Blank}", "");
String z = str.replaceAll("\\p{Z}", "");
// \\s removed all white spaces
System.out.println("s [" + s + "]\n");
// \\p{Space} removed all white spaces
System.out.println("p [" + p + "]\n");
// \\p{Blank} removed only \t and spaces not \n\f\r
System.out.println("b [" + b + "]\n");
// \\p{Z} removed only spaces not \t\n\f\r
System.out.println("z [" + z + "]\n");
// NOTE: \p{Separator} throws a PatternSyntaxException
try {
String t = str.replaceAll("\\p{Separator}","");
System.out.println("t [" + t + "]\n"); // N/A
} catch ( Exception e ) {
System.out.println("throws " + e.getClass().getName() +
" with message\n" + e.getMessage());
}
} // public static void main
这个输出是:
s [word1word2]
p [word1word2]
b [word1
word2]
z [word1
word2]
throws java.util.regex.PatternSyntaxException with message
Unknown character property name {Separator} near index 12
\p{Separator}
^
这表明在Java \\ p {Z}中只删除空格而不是“任何类型的空格或不可见的分隔符”。
这些结果还表明在Java \\ p {Separator}中抛出了PatternSyntaxException。
答案 2 :(得分:0)
首先,\p
意味着您要匹配一个类,一个字符集合,而不是单个字符。供参考,这是Pattern类的Javadoc。 https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
与Perl一样,Unicode脚本,块,类别和二进制属性使用\ p和\ P结构编写。如果输入具有属性prop,则\ p {prop}匹配,而如果输入具有属性prop,则\ P {prop}不匹配。
然后Z
是字符类(集合,集合)的名称。在这种情况下,它是Separator
的缩写。 Separator
包含3个子类:Space_Separator
,Line_Separator
和Paragraph_Separator
。在这里引用这些类包含哪些字符:http://www.unicode.org/Public/UCD/latest/ucd/PropList.txt
更多文档:http://www.unicode.org/reports/tr18/#General_Category_Property