Regex - определить матрицу из строки - PullRequest
2 голосов
/ 06 сентября 2011

как создать простую матрицу для строки, которая может содержать следующие комбинации

123456 ABC    
123456AB1
123456AB12
123456AB123
123456

например

if ("\\d + \\d + \\d + \\d + \\d + \\d  
   + \\s 
   + [a-zA-Z]+[a-zA-Z]+[a-zA-Z]") {
   //passed variant from input in form 123456 ABC

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
   + [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
   + \\d") {
   //passed variant from input in form 123456AB1

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
   + [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
   + \\d + \\d") {
   //passed variant from input in form 123456AB12

} else if ("\\d + \\d + \\d + \\d + \\d + \\d 
   + [a-zA-Z]+[a-zA-Z]+[a-zA-Z]
   + \\d + \\d + \\d") {
   //passed variant from input in form 123456AB123

} else if ("\\d + \\d + \\d + \\d + \\d + \\d") {
   //passed variant from input in form 0123456

} else {
   //doesn't match
}

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Например, вы можете использовать следующие регулярные выражения

123456 ABC  -> \\d{6}\\s\\w{3}
123456AB1   -> \\d{6}\\w{3}
123456AB12  -> \\d{6}\\w{4}
123456AB123 -> \\d{6}\\w{5}
123456      -> \\d{6}

Можно использовать условия if, как в вашем примере, например,

if(str.matches("\\d{6}\\s\\w+") { 
    ... 
} ...

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

1 голос
/ 06 сентября 2011

Если вам нужно разбить входные строки на соответствующие части, попробуйте следующее регулярное выражение: (\d{6})\s*([a-zA-Z]*)(\d*)

Для 123456AB123 группа 1 будет 123456, группа 2 будет AB, а группа 3 будет 123. Когда группы отсутствуют, они будут просто пустой строкой.

Обратите внимание, что если единственное различие между вариантами будет в группах (группа 1 всегда существует, группы 2 и 3 могут быть пустыми), тогда if-else для разных регулярных выражений не понадобится. Вместо этого у вас может быть что-то вроде этого (псевдокод):

if(matches) {
  groups[3] = extractGroups();

  //groups[0] should always exist

  if(groups[1] is not empty) {
    ...
  }

  if(groups[2] is not empty) {
    ...
  }
} else {
  handle non-match
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...