簡體   English   中英

Java正則表達式,用於刪除除模式以外的所有字符

[英]Java regex for removing all characters except a pattern

我有一個包含電子郵件的字符串。 在此之前和/或之后可能有多余的字符。 輸入示例:

a1@b.com
a2@b.com abcd efg
x y z a3@b.com
p q a4@b.com x z
asd[x5@c.net]gh

我想刪除多余的字符。

所需的輸出:

a1@b.com
a2@b.com
a3@b.com
a4@b.com
x5@c.net

有效字符為a-zA-Z0-9._,因此在電子郵件之前和/或之后可能存在無效字符。

我嘗試使用此代碼來確定它是否是正確的電子郵件(假定它與其他字符之間用空格隔開),但是我無法替換為所需的字符串(使用s.replaceAll()):

if (s.matches("(?i).*\\s[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+.*") ||
    fields[2].matches("(?i).*[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+\\s.*"))

您可以使用java.util.regex.Pattern和java.util.regex.Matcher

此代碼將執行您要求的操作:

public static void main(String[] args) {
    String[] testList = {"a1@b.com", 
            "a2@b.com abcd efg", 
            "x y z a3@b.com", 
            "p q a4@b.com x z", 
            "asd[a5@b.coom]gh"};

    Pattern EMAIL_PATTERN = Pattern.compile("[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})");


    for(String test : testList){
        Matcher m = EMAIL_PATTERN.matcher(test);
        while (m.find()) {
             System.out.println(m.group(0));
        }
    }
}

根據您對有效字符的定義,嘗試:

^.*?([\w.]+@[\w.]+).*$

並替換為捕獲組1

無法驗證電子郵件地址。 只能驗證類似電子郵件地址的外觀 -由於新的tlds的字符數超過3個,因此即使完成此任務也非常棘手。

因此,您最好找到“無效”的電子郵件地址(郵件發送將失敗),然后丟失有效的電子郵件地址。

采用

([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))

抓取任何可能是電子郵件地址的內容。

  ([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))

正則表達式可視化

Debuggex演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM