【问题标题】:Regular expression for separating words by uppercase letters and numbers用大写字母和数字分隔单词的正则表达式
【发布时间】:2012-06-07 21:17:57
【问题描述】:

我想知道是否有人知道正则表达式会变成这样:

西四街

进入这个:

西四街

我将在 Objective-C 中将空格添加到字符串中。

谢谢!

【问题讨论】:

    标签: objective-c regex


    【解决方案1】:

    我不知道你想在哪里加空格,但可以试试[a-z.-][^a-z .-],然后在每次匹配的两个字符之间加一个空格。

    【讨论】:

    • 嘿耶利米,正则表达式有效,但我无法在字母之间添加 objC 中的空格。这是我到目前为止所拥有的: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}`
    【解决方案2】:

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

    我不太确定的字母。

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

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

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

    【讨论】:

      【解决方案3】:

      如果您的所有字符串都真正符合您示例的格式,这应该可以工作:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多