Регулярное выражение для разделения слов заглавными буквами и цифрами - PullRequest
1 голос
/ 07 марта 2011

Мне было интересно, кто-нибудь может знать, что такое регулярное выражение, чтобы превратить это:

West4thStreet

в это:

Западная 4-я улица

Я собираюсь добавить пробелы к строке в Objective-C.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

Что-то вроде этой подстановки в регулярном выражении perl ставит пробел перед каждой группой заглавных букв или цифр.(В этом случае вы также хотите обрезать пробел перед строкой.) Полагаю, вы не хотите, чтобы она разбивалась, например: 45thStreet to 4 5th Street

Буквы, в которых я менее уверен.1005 *

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

Я создал шаблон, который не соответствует началу строки моего личного развлечения:

s/([^\^])([A-Z]+|[0-9]+)/\1 \2/g
2 голосов
/ 07 марта 2011

Я не знаю точно, где вы хотите поставить пробелы, но попробуйте что-то вроде [a-z.-][^a-z .-], а затем вставьте пробел между двумя символами в каждом совпадении.

1 голос
/ 07 марта 2011

Это должно работать, если все ваши строки действительно соответствуют формату вашего примера:

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

Затем вы можете разделить группы пробелами.

0 голосов
/ 06 июня 2012

Другим вариантом было бы не использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...