如果我在objective-c中有以下正则表达式:
NSString * strippedNumber = [incomingString stringByReplacingOccurrencesOfString:@"[^0-9.]"
withString:@""
options:NSRegularExpressionSearch
range:NSMakeRange(0, [incomingString length])];
如何添加它以仅提取减号( - )符号?我已经用它来演示0到9的范围。
由于
麦克
答案 0 :(得分:0)
对你的问题的直接回答是将-
作为第一个,或者如果否定了集合表达式的第二个字符 - 在该位置它不被视为特殊。所以:
@"[-0-9.]"
匹配数字,-
& .
,并且:
@"[^-0-9.]"
匹配数字以外的任何内容,-
& .
。
但是,您似乎正在尝试解析数字,如果您这样做,最好匹配可接受的格式,而不是简单地尝试删除不应该在数字中的字符。例如,使用字符串:
@"asda -123.45 tesco 1.2-3 sainsburys"
你的方法产生:
@"-123.451.2-3"
这可能不是你想要的。
您需要匹配数字的确切正则表达式取决于您接受的格式。例如,数字可能是:
-?
,-
零或一次(?
)[0-9]+
(...)?
- 无论...
为零还是一次\\.
,点是特殊的,因此必须在正则表达式(\
)中进行转义,反斜杠在字符串中是特殊的,因此它也必须被转义( \
)[0-9]+
将它们放在一起,你得到@"-?[0-9]+(\\.[0-9]+)?"
来匹配一个数字。要在字符串中找到与此模式匹配的所有数字:
NSError *error = nil;
NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:@"-?[0-9]+(\\.[0-9]+)?" options:0 error:&error];
NSArray *matches = [re matchesInString:incomingString options:0 range:NSMakeRange(0, incomingString.length)];
for (NSTextCheckingResult *match in matches)
{
NSLog(@"match: %@", [incomingString substringWithRange:match.range]);
}
在字符串@"asda -123.45 tesco 1.2-3 sainsburys"
上运行它会产生:
match: -123.45
match: 1.2
match: -3
您可能还希望考虑其他解析字符串的方法,例如NSScanner
。
HTH