gpt4 book ai didi

ios - 用\w匹配非英文字符

转载 作者:行者123 更新时间:2023-11-29 13:00:59 25 4
gpt4 key购买 nike

我正在尝试从 html 中提取一些名称。例如,字符串可能如下所示:

Doe, J

我使用的模式是:

\w+, \w

只要名称由英文字母组成,一切正常。相同的模式与西类牙文或波兰文名称不匹配:

Cortázar, J
Król, S

显然具体字符有问题。有什么想法可以使\w 匹配这些字符吗?我查看了 NSRegularExpression options ,但我认为它不支持它。或者也许我忽略了这里的重点,我应该想出更智能的正则表达式?

最佳答案

\w 的一个问题是您需要将它放入一个字符串中,并正确转义所有反斜杠。

NSArray *names = @[@"Cortázar, J", @"Król, S", @"Don't Match This", @"Doe, J", @"Høegh, K"];

NSString *pattern = @"\\w+, \\w";
NSPredicate *pred = [NSPredicate predicateWithFormat: @"self MATCHES %@", pattern];

NSArray* result = [names filteredArrayUsingPredicate: pred];

它正确匹配了名称,但在索引 2 处遗漏了“错误”字符串。

这表明您可以使用 NSRegularExpression 匹配字符串,因为谓词引擎使用相同的正则表达式语法。

编辑添加:

如果您坚持直接使用 NSRegularExpression,那么您可以通过更多代码看到它的工作原理:

// The names and pattern variables taken from code above

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:&error];

for (NSString *string in names) {

NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
NSString *result = [string substringWithRange:rangeOfFirstMatch];
NSLog(@"Match: '%@'", result);
}
else {
NSLog(@"No match: '%@'", string);
}
}

您会看到它匹配名称,包括纯 ASCII 或各种欧洲重音字符,但它不匹配字符串“Don't Match This”。

关于ios - 用\w匹配非英文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com