Извлечение слов с включенным верхним регистром не работает для слов, он только извлекает символы - PullRequest
0 голосов
/ 31 декабря 2018

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

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

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


public class Main {

public static void main (String[] args){

    String mebo = "1323 99BIMCP 1 2 BMWQ-CSPS-D1, 0192, '29229'";


    Pattern pattern = Pattern.compile("[((a-zA-Z1-9-0)/W)]");

    Matcher matcher = pattern.matcher(mebo);


    while (matcher.find()) {

        System.out.printf("Word is %s %n",matcher.group(0));

    }

}
}

Это текущий вывод:

Слово - 1 Слово - 3 Слово -2 Слово это 3 Слово это 9 Слово это 9 Слово это B Слово это я Слово это M Слово это C Слово это C Слово это P Слово это 1 Слово это 2 Слово это B Слово это M Слово это W Слово это Q Слово это - Слово это C Словоэто S Слово это P Слово это S Слово это - Слово это D Слово это 1 Слово это 0 Слово это 1 Слово это 9 Слово это 2 Слово это 2 Слово это 9 Слово это 9 Слово это 2 Слово это 2 Слово это 9

============

Я ожидаю, что выполним итерацию целых слов, например:

String mebo = "1323 99BIMCP 1 2 BMWQ-CSPS-D1, 0192, '29229' "

слово 1323 слово 99BIMCP слово 1 слово 2 слово BMWQ-CSPS-D1 слово 0192 слово 29229

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

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

String mebo = "1323 99BIMCP 1 2 BMWQ-CSPS-D1, 0192, '29229'";
String[] parts = mebo.split("\\s*,?\\s+");
for (String part : parts) {
   System.out.println(part.replaceAll("[']", ""));
}

1323
99BIMCP
1
2
BMWQ-CSPS-D1
0192
29229

Логика здесь заключается в разделении на пробельные символы, возможно, включая разделитель запятых.Затем мы можем выполнить замену регулярных выражений, чтобы удалить случайные символы, такие как одинарные кавычки.Двойные кавычки и любые другие нежелательные символы могут быть легко добавлены к классу символов, используемому для замены.

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

One, "Two or more", Three

Мой ответ здесь не удаётся, потому что он слепо разделяется на пробел и не знает, что пробел, оставшийся пробел, не является токеном.Регулярное выражение также не будет выполнено здесь.

0 голосов
/ 31 декабря 2018

Вы можете использовать это, как это видно из вашего регулярного выражения, вы хотите включить character digit и - в ваш матч.

`[\w-]+`
  • [\w-]+ - совпадения (az0-9 _ и -) один или несколько раз.

Демо

0 голосов
/ 31 декабря 2018

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

for (String word : mebo.split("[^\\d\\w-]+")) {
    System.out.printf("Word is %s %n", word);
}

Это должно демонстрировать желаемое поведение.Обратите внимание, что это сгенерирует несколько пустых строк, если у вас нет + в шаблоне расщепления.

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

...