2012-05-31 4 views
1

Я хочу разбить имя camelCase на отдельные имена, используя регулярное выражение, для выполнения проверки орфографии.Regex to split Случай верблюда - с числами

Разделение должно быть следующим:

1) extendedStructureForNUB -> расширена, структура, для, Nub

2) extendedStructureFor2004 -> расширена, структура, для, 2004

Использование ответ из приведенного ниже вопроса, я могу разделить на 1-ое условие.

Вопрос: RegEx to split camelCase or TitleCase (advanced)

Но для строки, содержащей номер (второе условие), он не возвращается в соответствии с форматом.

extendedStrctureFor2004 --> extended, Structure, For2004 

Пожалуйста, предложите способ, с помощью которого я могу повторно использовать это регулярное выражение для разделения чисел.

+0

Hello2000WORLD -> Здравствуйте, 2000, WORLD –

+0

MYNewString -> MY New String –

ответ

3
public static void main(String[] args) 
{  
    for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) { 
     System.out.println(w); 
    } 
} 

Edit: исправляющие случай для UPPER2000UPPER регулярного выражение становится:

public static void main(String[] args) 
{  
    for (String w : "camelValue".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!(^|[^A-Z]))(?=[0-9])|(?<!(^|[^0-9]))(?=[A-Za-z])|(?<!^)(?=[A-Z][a-z])")) { 
     System.out.println(w); 
    } 
} 
+0

Ошибка типографии. Проверено и работает! Благодарю. Удалил мой комментарий. –

+0

Вы правы ... Работая над этим. –

+0

Исправлено. Но это очень много. –

1
public static void main(String[] args) 
{ 
    for (String w : "extended2004FeeStructure".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) { 
     System.out.println(w); 
    } 
} 

исправлен один

+0

Это будет возвращать [продлен, 2, 0, 04, плата, структура] для extended2004FeeStructure , Что мне нужно [extended, 2004, Fee, Structure] –

+0

исправленная функция –

+0

Проверено и работает !! Благодарю. +1 –

0

После этого разделите

extendedStrctureFor2004 -> расширенный, структура, For2004

магазин это в некотором массиве, как "обр"

Использование это Regex

var numberPattern =/[0-9] +/g; var numMatch = arr [i] .match (numberPattern);

Теперь numMatch будет содержать цифры и хотят ..

+0

Речь идет о Java, а не о JavaScript. –

1

То, что я вижу, это ответ от вашего предыдущего вопроса почти извращен. Если я попробую вас, я просто добавлю еще одно разделение, но на этот раз перед первой цифрой посередине в каждом слове.

Вот пример:

String data="2Hello2000WORLDHello2000WORLD"; 
//your previois split 
String[] myFirstSplit=data.split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"); 

//I will store split results in list (I don't know size of array) 
List<String> list=new ArrayList<>(); 
for (String s:myFirstSplit){ 
    //if splited word contains digit after letter then split 
    for (String tmp:s.split("(?<=[a-zA-Z])(?=[0-9])")) 
     list.add(tmp); 
} 
System.out.println(list); 
//out [2, Hello, 2000, WORLD, Hello, 2000, WORLD] 
+0

Это будет работать в моем случае, но я не уверен, насколько эффективно это будет. Мне нужно сравнить все имена переменных в базе кода (которые могут легко содержать тысячи или lakhs имен переменных) в отношении словаря проверки орфографии. –