【发布时间】:2012-06-07 21:17:57
【问题描述】:
我想知道是否有人知道正则表达式会变成这样:
西四街
进入这个:
西四街
我将在 Objective-C 中将空格添加到字符串中。
谢谢!
【问题讨论】:
标签: objective-c regex
我想知道是否有人知道正则表达式会变成这样:
西四街
进入这个:
西四街
我将在 Objective-C 中将空格添加到字符串中。
谢谢!
【问题讨论】:
标签: objective-c regex
我不知道你想在哪里加空格,但可以试试[a-z.-][^a-z .-],然后在每次匹配的两个字符之间加一个空格。
【讨论】:
NSString *myText2 = @"West4thStreet";NSString *regexString2 = @"([a-z.-][^a-z .-])";for(NSString *match2 in [myText2 componentsMatchedByRegex:regexString2 capture:1L]) {NSString *myString = [myText2 stringByReplacingOccurrencesOfString:match2 withString:@" "];NSLog(@"Prints out: %@",myString);// Prints out: Wes thStreet// Prints out: West4t treet}`
类似这种 perl 正则表达式替换会在每个 组 大写字母或数字之前放置一个空格。 (在这种情况下,您还想在字符串之前修剪空格。)我假设您不希望它分解,例如:45thStreet 到 4 5th Street
我不太确定的字母。
s/([A-Z]+|[0-9]+)/ \1/g
为了我的个人娱乐,我创建了一个与行首不匹配的模式:
s/([^\^])([A-Z]+|[0-9]+)/\1 \2/g
【讨论】:
如果您的所有字符串都真正符合您示例的格式,这应该可以工作:
([A-Z][a-z]+)(\d+[a-z]+)([A-Z][a-z]+)
然后您可以用空格分隔组。
【讨论】:
另一种选择是不使用 RegExKit,而是使用代码循环遍历字符串中的每个字符,并在每个大写字母后或第一个小数点后插入一个空格..
NSMutableString *myText2 = [[NSMutableString alloc] initWithString:@"The1stTest"];
bool isNumber=false;
for(int x=myText2.length-1;x>1;x--)
{
bool isUpperCase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[myText2 characterAtIndex:x]];
bool isLowerCase = [[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:[myText2 characterAtIndex:x]];
if([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[myText2 characterAtIndex:x]])
isNumber = true;
if((isUpperCase || isLowerCase) && isNumber)
{
[myText2 insertString:@" " atIndex:x+1];
isNumber=false;
}
if(isUpperCase)
[myText2 insertString:@" " atIndex:x];
}
NSLog(@"%@",myText2); // Output: "The 1st Test"
【讨论】: