JAVA Regex - Как исключить определенное расширение электронной почты? - PullRequest
2 голосов
/ 11 апреля 2019

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

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

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Emails {
    public static void main(String args[]) throws IOException {
        Scanner scanner = new Scanner(new File("rajeev.dat"));

        ArrayList<String[]> lines = new ArrayList<>();

        Pattern regex = Pattern.compile("(?!^([A-Za-z0-9.]+(?!@Google.org)|[A-Za-z0-9.]+(?!@Yahoo.net)))");
        Pattern findComma = Pattern.compile(",");

    while(scanner.hasNextLine()){
        lines.add(scanner.nextLine().split(","));
    }

    for(String[] s: lines){
        for(String s1: s){
            System.out.println(s1);
        }
        System.out.println();
    }


    String temp = "";

    String output = "";

    output += lines.get(0)[0] + ":" + lines.get(0)[1] + ":";

    for(int i = 2; i < lines.get(0).length; i++){
        temp += lines.get(0)[i] + " ";
    }

        System.out.println(temp);

    Matcher match = regex.matcher(temp);
    String temp2 = "";
    boolean nofail = false;

        while(match.find()){
            output += match.group().trim() + ":";
            nofail = true;
        }


        if(nofail) {
            System.out.println(output);
        }


    }
}

Ожидается, что программа отсортирует любое электронное письмо с расширениями, которые не являются @ Google.org или @ yahoo.net

Программа не находит совпадений

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Можете ли вы попробовать это? https://regex101.com/r/hbnvr8/1/

Pattern.compile("^([A-Za-z0-9.]+(\\.?)+([A-z0-9]?))+@(?!(Yahoo.net|Google.org)$)[A-z]+\\.[A-z]+$")
0 голосов
/ 11 апреля 2019

Вы можете использовать отрицательный прогноз (?!Google\.org|Yahoo\.net), чтобы утверждать, что прямо справа от @ нет ни Google.org, ни Yahoo.net. Примечание: экранируйте точку, чтобы буквально соответствовать ей.

Если в вашем классе символов указаны только те символы, которые вы хотите разрешить [A-Za-z0-9.], вы можете использовать регулярное выражение, которое сначала соответствует классу символов без точки, используя [A-Za-z0-9]+

Затем повторите часть 0+ раз, начиная с точки, используя (?:\.[A-Za-z0-9])*, чтобы предотвратить начало или окончание электронного письма с точкой.

Обратите внимание, что вы можете расширить классы символов , чтобы разрешить большее количество символов.

^[A-Za-z0-9]+(?:\.[A-Za-z0-9])*@(?!Google\.org|Yahoo\.net)[A-Za-z0-9]+(?:\.[A-Za-z0-9])*\.\w+$

В Java

String regex = "^[A-Za-z0-9]+(?:\\.[A-Za-z0-9])*@(?!Google\\.org|Yahoo\\.net)[A-Za-z0-9]+(?:\\.[A-Za-z0-9])*\\.\\w+$";

Regex demo

0 голосов
/ 11 апреля 2019

Получил этот шаблон, работающий на регулярном выражении:

^([A-z0-9]+(\.?)+([A-z0-9]?))+@(?!(Yahoo.net|Google.com))[A-z]+\.[A-z]+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...