我需要删除收到的字符串中的以下字符:
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}
也涵盖了它?
1条答案
按热度按时间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:您可以将此模式与String.replaceAll()方法调用结合使用,以从字符串中删除所有出现的空格字符: