पैटर्न वैलिडेशन

Java में डेटा क्लीनिंग

Dennis Lee

Software Engineer

हमें पैटर्न वैलिडेशन की ज़रूरत क्यों है

  • सही होने के लिए डेटा को तय फॉर्मेट्स मानने चाहिए
  • उदाहरण: तारीखें एक समान फॉर्मेट जैसे d-MMM-yy में हों
  • समस्या: असंगत फॉर्मेट, जैसे "24/02/22"
  • समाधान: असंगत फॉर्मेट पकड़ने के लिए पैटर्न वैलिडेशन इस्तेमाल करें

 

// हमने ये तारीखें अपने डेटासेट से निकालीं
List<String> dates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                   "27-Apr-22", "24/02/22");
Java में डेटा क्लीनिंग

पैटर्न वैलिडेशन के तीन प्रकार

  • फुल पैटर्न मैचिंग
    • जब फॉर्मेट बिल्कुल सटीक होना चाहिए
    • उदाहरण: d-MMM-yy फॉर्मेट की तारीखें वैलिडेट करना
  • पैटर्न फाइंडिंग
    • जब सटीक पोज़िशन मायने नहीं रखती
    • उदाहरण: डिस्क्रिप्शन में प्रोडक्ट कैटेगरी ढूँढना/जाँचना
    • "Dark Chocolate" वाले प्रोडक्ट: "85% Dark Chocolate Bar", "Dark Chocolate with Nuts"
  • कैरक्टर मैचिंग
    • जल्दी स्क्रीनिंग के लिए
    • उदाहरण: क्वांटिटी फील्ड में अक्षर हैं क्या जाँचना ("12.5x")
Java में डेटा क्लीनिंग

Regex से पैटर्न परिभाषित करना

  • तारीख का पैटर्न d-MMM-yy मैच करें (जैसे "4-Jan-22")
  • Regex: \\d{1,2}-[A-Za-z]{3}-\\d{2}

 

\\d{1,2}     // दिन के 1-2 अंक (जैसे 4 या 27)
-            // लिटरल हाइफ़न सेपरेटर

[A-Za-z]{3} // महीने के ठीक 3 अक्षर, जैसे Jan; uppercase या lowercase - // लिटरल हाइफ़न सेपरेटर
\\d{2} // साल के ठीक 2 अंक (जैसे 22)
Java में डेटा क्लीनिंग

फुल पैटर्न मैचिंग

import java.util.regex.Pattern;
// d-MMM-yy मैच करें
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");

for (String date : dates) { // जाँचें कि date datePattern से मैच होती है या नहीं boolean isValid = datePattern.matcher(date).matches(); System.out.println(date + " is valid: " + isValid); }
Java में डेटा क्लीनिंग

फुल पैटर्न मैचिंग: आउटपुट्स

4-Jan-22 is valid: true
1-Aug-22 is valid: true
7-Jul-22 is valid: true
27-Apr-22 is valid: true
24/02/22 is valid: false
Java में डेटा क्लीनिंग

पैटर्न फाइंडिंग

import java.util.regex.Matcher;
Pattern monthPattern = Pattern.compile("[A-Za-z]{3}"); // 3 अक्षर जैसे "Jan"

for (String date : dates) { Matcher matcher = monthPattern.matcher(date); // क्या monthPattern date में है?
if (matcher.find()) { // पैटर्न मिला तो true लौटाता है
// matcher.group() मिला हुआ कंटेंट लौटाता है System.out.println("Month found: " + matcher.group()); } else { System.out.println("No month found in: " + date); } }
Java में डेटा क्लीनिंग

पैटर्न फाइंडिंग: आउटपुट्स

Month found: Jan
Month found: Aug
Month found: Jul
Month found: Apr
No month found in: 24/02/22
Java में डेटा क्लीनिंग

कैरक्टर मैचिंग

import com.google.common.base.CharMatcher;
for (String date : dates) {
    boolean isValid =
            // date में digits जाँचें
            CharMatcher.inRange('0', '9').matchesAnyOf(date) &&

// date में letters (uppercase और lowercase) जाँचें CharMatcher.inRange('a', 'z') .or(CharMatcher.inRange('A', 'Z')).matchesAnyOf(date) &&
CharMatcher.is('-').matchesAnyOf(date); // date में हाइफ़न जाँचें System.out.println(date + " has valid characters: " + isValid); }
Java में डेटा क्लीनिंग

कैरक्टर मैचिंग: आउटपुट्स

4-Jan-22 has valid characters: true
1-Aug-22 has valid characters: true
7-Jul-22 has valid characters: true
27-Apr-22 has valid characters: true
24/02/22 has valid characters: false
Java में डेटा क्लीनिंग

सब कुछ साथ में

// पैटर्न d-MMM-yy परिभाषित करें, जैसे 4-Jan-22
Pattern datePattern = Pattern.compile("\\d{1,2}-[A-Za-z]{3}-\\d{2}");
// फुल पैटर्न मैचिंग (क्या date datePattern से मैच है?)
boolean matchesPattern = datePattern.matcher(date).matches();
// पैटर्न फाइंडिंग (क्या date में month सबस्ट्रिंग है?)
boolean hasMonth = Pattern.compile("[A-Za-z]{3}").matcher(date).find();
// कैरक्टर मैचिंग (क्या date में digits हैं?)
boolean hasDigits = CharMatcher.digit().matchesAnyOf(date);
Java में डेटा क्लीनिंग

अभ्यास करते हैं!

Java में डेटा क्लीनिंग

Preparing Video For Download...