регулярное выражение Java - PullRequest
       1

регулярное выражение Java

4 голосов
/ 06 декабря 2011

Может кто-нибудь помочь мне сделать следующее в регулярном выражении Java?

Мне нужно прочитать 3 символа с 5-й позиции из заданной строки, игнорируя все, что найдено до и после.

Пример: testXXXtest

Ожидаемый результат: XXX

Ответы [ 5 ]

16 голосов
/ 06 декабря 2011

Вы вообще не нуждаетесь в регулярных выражениях.

Просто используйте подстроку: yourString.substring(4,7)

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

Pattern pattern = Pattern.compile(".{4}(.{3}).*");
Matcher matcher = pattern.matcher("testXXXtest");
matcher.matches();
String whatYouNeed = matcher.group(1);

Что это значит, шаг за шагом:

.{4} - любые четыре символа

( - начать захват группы, то есть то, что вам нужно

.{3} - любые три символа

) - группа захвата конца, вы получили это сейчас

.*, за которыми следуют 0 или более произвольных символов.

matcher.group(1) - получить 1-ю (единственную) группу захвата.

4 голосов
/ 06 декабря 2011

Вы можете использовать метод substring () , чтобы выполнить это:

string example = "testXXXtest";
string result = example.substring(4,7);
2 голосов
/ 06 декабря 2011

Это может помочь: Группы и захват в java.util.regex.Pattern .

Вот пример:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {
  public static void main(String[] args) {
    String text = "This is a testWithSomeDataInBetweentest.";
    Pattern p = Pattern.compile("test([A-Za-z0-9]*)test");
    Matcher m = p.matcher(text);
    if (m.find()) {
      System.out.println("Matched: " + m.group(1));
    } else {
      System.out.println("No match.");
    }
  }
}

Это печатает:

Matched: WithSomeDataInBetween

Если вы не хотите сопоставлять весь шаблон скорее с входной строкой (а не искать подстроку, которая будет соответствовать), вы можете использовать matches() вместо find().Вы можете продолжить поиск более подходящих подстрок с последующими вызовами с помощью find().

Кроме того, в вашем вопросе не указано, какие допустимые символы и длина строки между двумя «тестовыми» строками.Я предположил, что любая длина в порядке, включая ноль, и что мы ищем подстроку, состоящую из маленьких и заглавных букв, а также цифр.

1 голос
/ 06 декабря 2011

Вы можете использовать подстроку для этого, вам не нужно регулярное выражение.

yourString.substring(4,7);

Я уверен, что вы тоже можете использовать регулярные выражения, но почему, если вам это не нужно. Конечно, вы должны защищать этот код от нуля и слишком коротких строк.

0 голосов
/ 23 января 2018

Используйте метод класса String.replaceAll ()

Если вам не нужна оптимизация производительности, вы можете попробовать метод класса String.replaceAll () для более чистого варианта:

String sDataLine = "testXXXtest";
String sWhatYouNeed = sDataLine.replaceAll( ".{4}(.{3}).*", "$1" );

Ссылки

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