4

我写了一些正则表达式来处理字符串中的空格,它工作得很好,除了当我遇到这个字符时:“”而不是“”。你可能认为我疯了,但显然他们是不同的。查看这个 RegEx 应用程序(奇怪的是,它经常崩溃):

当我使用奇怪的空间时:

在此处输入图像描述

当我使用普通空间时:

在此处输入图像描述

如您所见,这里检测到更多空格,但它没有检测到奇怪的空格。

这个空间是什么?我该如何摆脱它?

4

4 回答 4

2

Unicode 有很多不同的空格字符。您在问题中发布的空间——在标题和正文中——是一个常规的 ASCII 空间,旧的 U+0020。

如果您想准确检查您复制到剪贴板上的内容,您可以pbpaste(1)在 Mac OS X 上运行该命令。例如,如果您复制了一个不间断空格 (U+00A0),您可以像这样识别它:

# Write pasteboard contents to stdout, convert from UTF-8 to UTF-32 for easy
# code point identification, then hex dump the contents
$ pbpaste | iconv -f utf-8 -t utf-32be | hexdump -C
00000000  00 00 00 a0                                       |....|
00000004

根据您使用的正则表达式引擎,它可能不支持所有这些,特别是如果您使用\s字符类。如果您想确保匹配您拥有的空格字符,则将其明确包含在您的字符类中,例如[\s<YOURSPACEHERE>]<YOURSPACEHERE>从您要匹配的字符复制+粘贴的位置。

于 2013-07-31T22:43:55.783 回答
1

尝试“\p{Z}”作为您的正则表达式。它是任何类型的空格或不可见分隔符的 unicode 属性。

请参阅:NSRegularExpressionUnicode 正则表达式


作为对我答案的测试,我构建了以下单元测试。

- (void)testPattern
{
    NSString *string = @"xxx\u00A0yyy";
    NSString *pattern = @"\\p{Z}";
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];

    NSUInteger number = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];
    STAssertEquals(number, 1U, @"");
}
于 2013-07-31T22:40:54.530 回答
0

您可以将 Unicode 字符与 \x{NNNN} 匹配,其中 NNNN 是字符的 Hexa 代码。请参阅ICU 用户指南

于 2014-04-12T08:06:37.637 回答
0

它们可能是不间断的空格,因为所有行都以与\s匹配的空格结尾,而不是这些神秘空格。尝试匹配\0xA0

于 2013-07-31T22:45:45.100 回答