[英]Regular Expression splitting up of NSString - iOS
在iOS中使用正則表達式拆分字符串
我已經使用循環解決了這個問題,但是想要一個更清晰的答案,我希望一個reg exe大師可以幫助我。
我的原始字符串可能如下所示
NSString *originalString = @"343 a mr smith needs this work";
NSString *originalStringVerTwo = @"345a mr jones needs this work as well";
NSString *originalStringVerThree = @"345 Mrs Someone";
我需要分成3個單獨的新字符串:
例如
應該導致以下結果
第1行
NSString *one = 123a
NSString *two = mr who
NSString *three = here are some words
第2行
NSString *one = 124b // i want the white space removed between number and digit
NSString *two = mrs jones
NSString *three = n/p
第3行
NSString *one = 654
NSString *two = Mr Foo
NSString *three = @""
第4行
NSString *one = 123
NSString *two = Jones
NSString *three = n/p
第5行
NSString *one = 345
NSString *two = n/p
NSString *three = @""
常數將是
將123a的空白區域移除到123a是理想的,但不是主要要求
這是一個應該有效的正則表達式:
^ //start of line
( //first capture group
[\d]+ //one or more digits
) //end of first capture group
(?: //start of optional non-capturing group
\s? //optional whitespace
( //second capture group
[ab] //character class - a or b
) //end of second capture group
)? //end of optional non-capturing group
\s //whitespace
( //third capture group
(?: //non-capturing group
Mr|Mrs|Mister //title alternation
)
\s //whitespace
[\w/]+ //1 or more word characters or "/"
| //alternation
[\w/]+ //1 or more word characters or "/"
) //end of third capture group
(?: //start of optional non-capturing group
\s //whitespace
( //fourth capture group
.* //0 or more of any character
) //end of fourth capture group
)? //end of optional non-capturing group
$ //end of line
構建你的正則表達式。 我們必須逃避轉義以將它們保留在NSString中:
NSString* regexString =
@"^([\\d]+(?:\\s?[ab])?)\\s((?:Mr|Ms|Mrs|Mister)\\s[\\w/]+|[\\w/]+)(?:\\s(.*))?$";
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:regexString
options:NSRegularExpressionCaseInsensitive
error:nil];
制作測試數組:
NSArray* testArray = @[
@"123a mr who here are some words"
,@"124 b mrs jones n/p"
,@"654 Mr Foo"
,@"123 Jones n/p"
,@"345 n/p"
,@"345"
,@"nothing here"
];
處理測試數組:
for (NSString* string in testArray) {
NSLog(@" ");
NSLog(@"input: '%@'",string);
NSRange range = NSMakeRange(0,string.length);
if ([regex numberOfMatchesInString:string options:0 range:range] == 1) {
NSString* body = [regex stringByReplacingMatchesInString:string
options:0
range:range
withTemplate:@"$1\n$2\n$3"];
NSArray* result = [body componentsSeparatedByString:@"\n"];
NSString* one = result[0];
NSString* two = result[1];
NSString* three = result[2];
NSLog(@"one: '%@'",one);
NSLog(@"two: '%@'",two);
NSLog(@"three: '%@'",three);
} else {
NSLog(@"no match");
}
}
輸出:
input: '123a mr who here are some words'
one: '123a'
two: 'mr who'
three: 'here are some words'
input: '124 b mrs jones n/p'
one: '124b'
two: 'mrs jones'
three: 'n/p'
input: '654 Mr Foo'
one: '654'
two: 'Mr Foo'
three: ''
input: '123 Jones n/p'
one: '123'
two: 'Jones'
three: 'n/p'
input: '345 n/p'
one: '345'
two: 'n/p'
three: ''
input: '345'
no match
input: 'nothing here'
no match
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.