用大写字母和数字分隔单词的正则表达式

时间:2011-03-07 03:46:09

标签: objective-c regex

我想知道是否有人可能知道正则表达式会变成什么:

  

West4thStreet

进入这个:

  

西四街

我要在Objective-C中为字符串添加空格。

谢谢!

4 个答案:

答案 0 :(得分:2)

我不知道你想把它放在空格的确切位置,但尝试[a-z.-][^a-z .-]之类的东西,然后在每场比赛的两个角色之间加一个空格。

答案 1 :(得分:2)

这样的perl正则表达式替换会在每个大写字母或数字的之前放置一个空格。 (在这种情况下,您也希望在字符串之前修剪空间。)我假设您不希望它分解,例如:45thStreet到4 5th Street

字母我不太确定。

s/([A-Z]+|[0-9]+)/ \1/g

为了个人娱乐,我创建了一个与行首不匹配的模式:

s/([^\^])([A-Z]+|[0-9]+)/\1 \2/g

答案 2 :(得分:1)

如果您的所有字符串都与您示例的格式完全匹配,那么这应该有效:

([A-Z][a-z]+)(\d+[a-z]+)([A-Z][a-z]+)

然后,您可以用空格分隔这些组。

答案 3 :(得分:0)

另一个选择是不使用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"