gpt4 book ai didi

objective-c - 如何从 Regex 捕获组中删除空格?

转载 作者:太空狗 更新时间:2023-10-30 03:33:10 25 4
gpt4 key购买 nike

正在检查的字符串类似于以下内容(注意括号之间的空格):

[name]  [address ] [ zip] [ phone number ]

我现在使用的表达...

\[([^\])]*)\]

...成功捕获了括号内的每个文本,但它也捕获了前导和尾随空格,所以我最终得到:

"name"  "address "  " zip"  " phone number "

但我寻求的是:

"name"  "address"  "zip"  "phone number"

如何说服正则表达式不捕获这些示例中的空格? (嵌入的空格除外 - 例如“电话号码”中的单词之间的空格。)

(注意:我知道我可以在表达式完成后 从捕获的变量中修剪它,但我试图在 表达。)

感谢您的任何想法!下面是我用来测试这个的确切代码:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[([^\\])]*)\\]" options:0 error:nil];

NSString *string = @" [name] [address ] [ zip] [ phone number ] ";

NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length])
withTemplate:@"\n\n[$1]"]; //note: adding brackets back here just to make it easy to see if the space has been trimmed properly from the captured value

NSLog(@"\n\n%@", modifiedString);

最佳答案

我将逐步完成此操作。

首先,([^\])]*) 不正确。这意味着“由 0 个或多个字符组成的序列,尽可能长,不包含 ] 或 )。”

例如,对于这个表达式:

 [name] [address ) ] [ zip] [ phone number ] 

...地址部分将被跳过,因为“address )”与 [^\)]]* 不匹配(这意味着“零个或多个字符的序列,不包括) 和 ]."

我们想要 ([^\]]*) 而不是跳过 )。

接下来,我们要吃掉捕获周围的所有空间。为此,我们使用两个 * 序列,在捕获的每一侧各一个:

\[ *([^\]]*) *\]

现在我们需要变得棘手了! [^\]]* 默认是贪心的。这意味着它可以匹配任何一侧的一些空格,因此包含在捕获中!我们想改用非贪婪版本 [^\]]*?。这意味着“一个 0 个或多个字符的序列,不包含 ],在符合正则表达式其余部分的同时尽可能短。”

\[ *([^\]]*?) *\]

关于objective-c - 如何从 Regex 捕获组中删除空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14906492/

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