使用正则表达式删除 Objective-C 中的特定#tag
Using a regex to remove a specific #tag in Objective-C
我正在尝试解析 Objective-C 中的字符串以删除与特定#tagged 字词完全匹配的内容。我可以创建正则表达式并毫无问题地删除特定单词,但是当我尝试删除带有前导“#”的字符串时,它不起作用。
这是我的代码:
NSString *originalString = @"This is just a #test that isn't working";
NSString *hashTag = @"#test";
NSString *placeholder = @"\b%@\b";
NSString *pattern = [NSString stringWithFormat:placeholder, hashTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
NSString *modifiedString = [regex stringByReplacingMatchesInString:originalString
options:0
range:NSMakeRange(0, [originalString length])
withTemplate:@""];
问题是即使原始字符串包含字符串#test,它也不会被删除。如果我用 "test" 交换“#test”,一切正常,但这不是我想要做的。我错过了什么?
因为space和#
之间不存在单词字符。两者都是非单词字符。所以我建议你删除开头的 \b
NSString *placeholder = @"%@\b";
或
使用负面回顾。
NSString *placeholder = @"(?<!\S)%@\b";
(?<!\S)
断言在匹配之前不存在非 space 字符的否定回顾。
要进行精确的字符串匹配,我建议您使用此 @"(?<!\S)%@(?!\S)"
正则表达式。 (?!\S)
否定前瞻,断言匹配后不会跟非 space 字符。
甚至有必要使用正则表达式,这个功能还不够吗?
[yourstring stringByReplacingOccurrencesOfString:@"#test" withString:@""];
我正在尝试解析 Objective-C 中的字符串以删除与特定#tagged 字词完全匹配的内容。我可以创建正则表达式并毫无问题地删除特定单词,但是当我尝试删除带有前导“#”的字符串时,它不起作用。
这是我的代码:
NSString *originalString = @"This is just a #test that isn't working";
NSString *hashTag = @"#test";
NSString *placeholder = @"\b%@\b";
NSString *pattern = [NSString stringWithFormat:placeholder, hashTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
NSString *modifiedString = [regex stringByReplacingMatchesInString:originalString
options:0
range:NSMakeRange(0, [originalString length])
withTemplate:@""];
问题是即使原始字符串包含字符串#test,它也不会被删除。如果我用 "test" 交换“#test”,一切正常,但这不是我想要做的。我错过了什么?
因为space和#
之间不存在单词字符。两者都是非单词字符。所以我建议你删除开头的 \b
NSString *placeholder = @"%@\b";
或
使用负面回顾。
NSString *placeholder = @"(?<!\S)%@\b";
(?<!\S)
断言在匹配之前不存在非 space 字符的否定回顾。
要进行精确的字符串匹配,我建议您使用此 @"(?<!\S)%@(?!\S)"
正则表达式。 (?!\S)
否定前瞻,断言匹配后不会跟非 space 字符。
甚至有必要使用正则表达式,这个功能还不够吗?
[yourstring stringByReplacingOccurrencesOfString:@"#test" withString:@""];