регулярное выражение для разделения строки в Java - PullRequest
1 голос
/ 13 июля 2011

Я хочу разбить строку, скажем [AO_12345678, Real Estate] на AO_12345678 и Real Estate

Как я могу сделать это в Java с помощью регулярных выражений?

Основная проблема, с которой я сталкиваюсь, заключается в том, чтобы избежать"[" и "]"
помогите пожалуйста

Ответы [ 5 ]

4 голосов
/ 13 июля 2011

Действительно ли это должно быть регулярное выражение?

, если нет:

String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");
2 голосов
/ 13 июля 2011

Я бы пошел прагматическим путем:

String org = "[AO_12345678, Real Estate]";
String plain = null;
if(org.startsWith("[") {
  if(org.endsWith("]") {
    plain = org.subString(1, org.length());
  } else {
    plain = org.subString(1, org.length() + 1);
  }
}

String[] result = org.split(",");

Если строка всегда заключена в '[]', вы можете просто вставить ее без проверки.

1 голос
/ 13 июля 2011

Вы также можете использовать StringTokenizer. Вот код:

String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();

s1 = AO_12345678

s1 = Недвижимость

Обратитесь к javadocs для чтения о StringTokenizer

http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

1 голос
/ 13 июля 2011

Один простой способ, предполагая, что формат всех ваших входных данных является согласованным, состоит в том, чтобы полностью игнорировать регулярное выражение и просто разбивать его.Будет работать что-то вроде следующего:

String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"]
String firstWithoutBrace = parts[0].substring(1);
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1);
String first = firstWithoutBrace.trim();
String second = secondWithoutBrace.trim();

Конечно, вы можете настроить это по своему усмотрению - вы можете проверить наличие фигурных скобок, например, перед их удалением.Или вы можете оставить пробелы перед запятой как часть первой строки.Однако это должно дать вам основу для изменения ваших конкретных требований.

И в таком простом случае, как этот, я бы предпочел код, подобный приведенному выше, регулярному выражению, которое извлекло две строки - я считаю, что первое оченьпонятнее!

0 голосов
/ 14 июля 2011

Другой вариант с использованием групп захвата регулярных выражений:

private static void extract(String text) {
    Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]");
    Matcher matcher = pattern.matcher(text);
    if (matcher.find()) { // or .matches for matching the whole text
        String id = matcher.group(1);
        String name = matcher.group(2);
        // do something with id and name
        System.out.printf("ID: %s%nName: %s%n", id, name);
    }
}

Если скорость / память важны, RE можно оптимизировать для (используя квантификаторы Possessive вместо Greedy)
"\\[([^,]*+),\\s*+([^\\]]*+)\\]"

...