Как я могу найти конкретные строки в строках строки, используя регулярное выражение в JAVA?

1

У меня здесь три строки.


линия 1: 56, C0348 | 23064, C0319 | 23182, C0127 | 1476, C0378 | 2004, C0260 | 3306, C0091 | 23179, C0525 |

линия 2: 8966, T4992 | 4446, T4992 | 4445, E | 8965, E; T4992 | 8964, E; C0163 |

строка 3: 920, M128; C0323 |


Теперь моя цель - удалить строки, имеющие форму "Tnumber |", "Cnumber |" , "Mnumber".

Например, в первой строке я хочу удалить "C0348 |", "C0319 |", "C0127 |", "C0378 |", "C0260 |", "C0091 |", "C0525 |

Во второй строке T4992 |, T4992, T4992 |, C0163 |

В третьей строке M128; C0323 |

Как я могу удалить эти строки из каждой строки?

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

Не могли бы вы мне помочь?

  • 0
    Каков ожидаемый результат?
  • 0
    упс извините. ожидаемый результат будет 56,23064,23182,1476,2004,3306,23179 для первой строки.
Показать ещё 4 комментария
Теги:

3 ответа

2
Лучший ответ

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

import java.util.regex.Pattern;

public class Test {

    private static final String REGEX = "(T|M|C)\\d+(;|\\|)?";
    private static final Pattern p = Pattern.compile(REGEX);

    public static String filterer(String inputString) {
        String result = "";
        for(String s : p.split(inputString)) {
            result += s;
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(filterer("56,C0348|23064,C0319|23182,C0127|1476,C0378|2004,C0260|3306,C0091|23179,C0525|"));
        System.out.println(filterer("8966,T4992|4446,T4992|4445,E|8965,E;T4992|8964,E;C0163|"));
        System.out.println(filterer("920,M128;C0323|"));
    }
}

Вывод

56,23064,23182,1476,2004,3306,23179,
8966,4446,4445,E|8965,E;8964,E;
920,

Демо-версия RegEx

Изображение 174551

Демоверсия Debuggex

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

Изображение 174551

Демоверсия Debuggex

  • 0
    благодарю вас! это то, что я хочу!
  • 0
    @BrandonRubinsky рад, что помог. Если вы чувствуете, что мой ответ помог вам, вы можете принять мой ответ :-)
1

Вы можете попробовать регулярное выражение [TCM]\d+[\|;], http://regexr.com/v1?38ls3. И как источник java:

String reg= "[TCM]\\d+[\\|;]";
String line = "56,C0348|23064,C0319|23182,C0127|1476,C0378|2004,C0260|3306,C0091|23179,C0525|";
line = line.replaceAll(reg, "");
System.out.println(line);
line = "8966,T4992|4446,T4992|4445,E|8965,E;T4992|8964,E;C0163|";
line = line.replaceAll(reg, "");
System.out.println(line);
line = "920,M128;C0323|";
line = line.replaceAll(reg, "");
System.out.println(line);

вывод:

56,23064,23182,1476,2004,3306,23179,
8966,4446,4445,E|8965,E;8964,E;
920,
  • 0
    благодарю вас! очень полезно.
  • 0
    @ user3149929 В третьей строке "M128;" должны быть удалены? Но вы сказали, что правило «Mnumber |», поэтому правило должно быть «Mnumber;»?
Показать ещё 2 комментария
0

так как это значения, разделенные запятой, вы можете разбить их как

String arr[] = line.split (",");

// iterate over them
int index = arr[0].indexOf ("|");
if (index != -1) {

   // do substring
} 
  • 0
    спасибо, это очень полезно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню