簡體   English   中英

正則表達式,用於查找字符串中的1到3個字符

[英]Regex for finding between 1 and 3 character in a string

我正在嘗試編寫一個正則表達式,如果在1到3之間出現[A-Za-z],則應返回true,但我無法執行此操作

public static void main(String[] args) {
    String regex = "(?:([A-Za-z]*){3}).*";
    String regex1 = "(?=((([A-Za-z]){1}){1,3})).*";

    Pattern pattern = Pattern.compile(regex);
    System.out.println(pattern.matcher("AD1CDD").find());
}

注意:對於連續的3個字符,我可以編寫它,但是我要實現的是,對於整個字符串,出現的次數應該在1到3之間。 如果有4個字符,則應返回false。 我已經使用超前實現

如果我正確理解您的問題,則要檢查

  • 字符串中包含[a-zA-Z]范圍的1至3個字符
  • 任何其他字符都可能經常出現任意性嗎?

首先,僅對字符進行計數而不使用正則表達式會更有效,因為這不是常規語言問題,而是瑣碎的計數問題。 使用for循環解決此問題沒有什么錯(除了諸如Python和R之類的解釋器可能相當慢)。

不過,您可以(ab-)使用擴展的正則表達式:

^([^A-Za-z]*[A-Za-z]){1,3}[^A-Za-z]*$

一旦您還對“其他”字符進行建模,這將非常簡單。 這就是您定義模式所要做的:對所有可接受的字符串(即整個“語言”)建模,不僅要建模您要查找的那些字符。

另外,您可以“ findAll”匹配([A-Za-z]) ,並查看結果的長度。 如果您還需要實際的字符,這可能會更方便。

for循環如下所示:

public static boolean containsOneToThreeAlphabetic(String str) {
    int matched = 0;
    for(int i=0; i<str.length; i++) {
        char c = str.charAt(i);
        if ((c>='A' && c<='Z') || (c>='a' && c<='z')) matched++;
    }
    return matched >=1 && matched <= 3;
}

這是直接,可讀,可擴展和高效的(在編譯語言中)。 您還可以添加if (matched>=4) return false; (或break )以盡早停止。

請停止使用正則表達式,這不僅會使您自己的生活變得復雜,而且會使將來必須處理您的代碼的人們的生活更加復雜。 選擇一種更簡單的方法,找到所有[A-Za-z]+字符串,將它們放入列表中,然后檢查每個字符串,如果長度在1到3之間或超出該范圍。

正則表達式

/([A-Za-z])(?=(?:.*\\1){3})/s

尋找一個char及其3個重復。 因此,如果匹配,則存在4個或更多相等的字符。

暫無
暫無

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

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