regex Java中的正则表达式

atmip9wb  于 2023-02-25  发布在  Java
关注(0)|答案(1)|浏览(155)

我需要删除收到的字符串中的以下字符:

U+0020 (space)
U+00A0 (no-break space)
U+1680 (ogham space mark)
U+2000 (en quad)
U+2001 (em quad)
U+2002 (en space)
U+2003 (em space) 
U+2004 (three-per-em space) 
U+2005 (four-per-em space) 
U+2006 (six-per-em space) 
U+2007 (figure space) 
U+2008 (punctuation space) 
U+2009 (thin space) 
U+200A (hair space) 
U+202F (narrow no-break space) 
U+205F (medium mathematical space) 
U+3000 (ideographic space) 
U+2028 (line separator) 
U+2029 (paragraph separator)

我发现,大多数列出的,我可以删除以下正则表达式:

\p{Zs}|\p{Zl}|\p{Zp}

这应该涵盖了除U+1680之外的所有内容。根据this site,*ogham空格标记 * 的模式应该是\p{InOgham},但当我在regex测试网站上测试它时,没有一个网站接受它。是否有特定的表达式,或者\p{Zs}也涵盖了它?

798qvoo8

798qvoo81#

Unicode字符U+1680是Ogham空格标记,它不同于标准空格字符(U+0020)和列出的其他空格字符。
在Java的正则表达式中,\p{Z}字符类表示任何Unicode分隔符,其中包括列出的除U+1680之外的所有空格字符。因此,正则表达式\p{Zs}|\p{Zl}|\p{Zp}应匹配列出的除U+1680之外的所有空格字符。
要精确匹配Ogham空格标记(U+1680),您可以使用\p{InOgham}字符类,它匹配Ogham Unicode块中的任何字符。下面是一个正则表达式模式示例,它匹配您列出的所有空格字符,包括U+1680:

[\p{Zs}\p{Zl}\p{Zp}\p{InOgham}]

您可以将此模式与String.replaceAll()方法调用结合使用,以从字符串中删除所有出现的空格字符:

String input = "some string with spaces and \u1680 ogham space marks";
String output = input.replaceAll("[\\p{Zs}\\p{Zl}\\p{Zp}\\p{InOgham}]", "");
System.out.println(output); // prints "somestringwithspacesandoghamspacemarks"

相关问题