我对正则表达式相对较新,需要一些建议。
目标是将以下格式的数据获取到数组中:
根据这些数据:“value =!@#777!@#value = @# 888 * ”
这是我的代码(目标C):
NSString *aTestString = @"value=!@#777!@#value=@#$**888***";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"value=(?=[^\d])(\d)" options:0 error:&anError];
所以我的问题是:
1)正则表达式引擎能捕获那样拆分的数据吗?检索“value =”删除中间的垃圾数据,然后将其编号为“777”等?
2)如果可以这样做,那么我的正则表达式是否有效?值=(?= [^ \ d])(\ d)
答案 0 :(得分:3)
前瞻(?=
)在这里是错误的,你没有正确地转义\d
(它变为\\d
),最后但并非最不重要的是你遗漏了量词{{1 }(0次或更多次)和*
(1次或更多次):
+
编辑:这是一个更精致的模式。它在NSString *aTestString = @"value=!@#777!@#value=@#$**888***";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"value=[^\\d]*(\\d+)"
options:0
error:NULL
];
[regex
enumerateMatchesInString:aTestString
options:0
range:NSMakeRange(0, [aTestString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSLog(@"Value: %@", [aTestString substringWithRange:[result rangeAtIndex:1]]);
}
];
之前捕获一个单词,然后丢弃非数字并随后捕获数字。
=
答案 1 :(得分:0)
正则表达式是与给定模式匹配的表达式。正则表达式可以使用类似“value = [#@!%^&] [0-9] ”的表达式匹配,例如“value =!@#777”之类的字符串,其中说匹配文字“value =”,然后匹配由字符#,@,!,%,^和&组成的任何字符串,最后是由数字组成的任何字符串。但是你不能单独使用一个正则表达式来获得你想要的字符串部分,即“value = 777”。
因此,一种解决方案是创建一个表达式来识别字符串,例如“value =!@#777”,然后对该字符串进行一些进一步处理以删除有问题的字符。
我认为你最好使用NSScanner扫描数据并提取你想要的部分。例如,您可以使用-scanString:intoString:
获取“value =”部分,然后使用-scanCharactersFromSet:intoString:
删除您不需要的部分,然后再次调用该方法以获取数字集合。