регулярное выражение Java - PullRequest
2 голосов
/ 22 марта 2010

Я должен создать регулярное выражение для некоторого преобразования пути. Пример для пути

//name:value /name:value // name:value
/name:value /name:value
/name:value//name:value

Дело в том, как проверить // или / в начале или середине строки и как я могу указать, что имя может содержать любые из этих a-zA-Z и _

Путь также содержит пробелы.

Ответы [ 3 ]

4 голосов
/ 22 марта 2010

Это должно помочь:

String s = "//name:value /name:value // name:value";
Pattern p = Pattern.compile("//?\\s*(\\w+):(\\w+)\\s*");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.printf("%s = '%s'%n", m.group(1), m.group(2));
}

Некоторые заметки:

  • Предполагается, что / или // могут определять name:value пар;
  • Необязательный пробел после / или // и после name:value игнорируется;
  • И name, и value захвачены. Вы не говорите, что хотите захватить. При необходимости измените скобки;
  • И name, и value состоят из A-Z, a-z, 0-9 или _ (вот что означает \w).

Если вы не хотите находить значения, а просто проверяете правильность в целом:

String s = "//name:value /name:value // name:value";
if (s.matches("(//?\\s*\\w+:\\w+\\s*)+")) {
  // it fits
}
1 голос
/ 22 марта 2010

Какую точность вы хотите архивировать?Вы просто хотите проверить, является ли ввод допустимым путем, или вы хотите извлечь какие-либо подходящие группы для дальнейшего преобразования?

В любом случае шаблон, который будет соответствовать строке, начинающейся с / или // иимя и значение, состоящие из a-zA-Z и _, будут:

(//?\s*[A-Za-z_]+:[A-Za-z_]+\s*)+
0 голосов
/ 22 марта 2010

Вы также можете использовать replaceAll для преобразования, если оно достаточно простое.

    String strings = "//cello:Yo-Yo Ma  / violin : Itzhak Perlman";
    System.out.println(strings.replaceAll(
        "//?\\s*(\\w+)\\s*:\\s*(.*?)\\s*(?=/|$)",
        "[$2] on [$1]\n"
    ));
    // "[Yo-Yo Ma] on [cello]"
    // "[Itzhak Perlman] on [violin]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...