Refactor Regex Pattern - Java - PullRequest
       12

Refactor Regex Pattern - Java

1 голос
/ 06 мая 2010

У меня есть следующая строка aaaa_bb_cc, чтобы соответствовать и написать шаблон регулярного выражения, как

\\w{4}+\\_\\w{2}\\_\\w{2} и все работает. Есть ли какое-нибудь простое регулярное выражение, которое может сделать то же самое?

Ответы [ 4 ]

3 голосов
/ 06 мая 2010

Вам не нужно избегать подчеркивания:

\w{4}+_\w{2}_\w{2}

И вы можете свернуть последние две части, если вы все равно их не захватите:

\w{4}+(?:_\w{2}){2}

Однако не становится короче.

(Примечание. Если хотите, заново добавьте необходимые обратные слеши для строк Java; я предпочитаю их опускать при обсуждении регулярных выражений:))

2 голосов
/ 06 мая 2010

Я иногда делаю то, что я называю "мета-регулярным выражением", следующим образом:

    String pattern = "x{4}_x{2}_x{2}".replace("x", "[a-z]");
    System.out.println(pattern); // prints "[a-z]{4}_[a-z]{2}_[a-z]{2}"

Обратите внимание, что здесь не используется \w, что может соответствовать подчеркиванию. То есть ваш оригинальный шаблон будет соответствовать "__________".

Если x действительно нужно заменить на [a-zA-Z0-9], то просто сделайте это в одном месте (вместо 3 мест).

Другие примеры

2 голосов
/ 06 мая 2010

Похоже, что вашему \ w не нужно совпадать с подчеркиванием, поэтому вы можете использовать [a-zA-Z0-9] вместо

[a-zA-Z0-9]{4}_[a-zA-Z0-9]{2}_[a-zA-Z0-9]{2}
2 голосов
/ 06 мая 2010

Да, вы можете использовать только \\w{4}_\\w{2}_\\w{2} или, может быть, \\w{4}(_\\w{2}){2}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...