एक स्ट्रिंग के मध्य से विशिष्ट पाठ और प्रासंगिक ईमेल आईडी ढूंढें और इसे सी # में सूचीबद्ध करने के लिए डेटा योग्य या स्टोर करें

Nov 23 2020

मेरे पास नीचे के रूप में एक स्ट्रिंग है

string error_message= "{\"2705\":\"Error importing username: 3167763, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\",\"10001\":\"Error importing username: 3195330, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\"}";

उपरोक्त स्ट्रिंग से मुझे दोहराए जाने वाले पाठ को खोजने की आवश्यकता है "उपयोगकर्ता नाम आयात करने में त्रुटि:" और इसके बाद उपयोगकर्ता नाम मान लें, साथ ही "प्राथमिक ईमेल:" पाठ के बाद संबंधित ईमेल आईडी के साथ और नीचे अपेक्षित आउटपुट के साथ डेटाटेबल में संग्रहीत करें।

नीचे के रूप में Datatable में अपेक्षित परिणाम

username    primary email
3167763     [email protected]
3195330     [email protected]

नीचे दिया गया कोड नमूना मेरे पास है जहां मैं सूची में सभी उपयोगकर्ता नाम प्राप्त करने में सक्षम हो सकता हूं मुझे नीचे दिए गए कोड को संशोधित करने की आवश्यकता है दोनों उपयोगकर्ता नाम और संबंधित प्राथमिक ईमेल आईडी और साथ ही एक संग्रह में आपकी मदद बहुत उपयोगी होगी

List<int> list = Regex.Matches(error_message, @"(?<=Error importing username: )\d+")
    .Cast<Match>()
    .Select(match => int.Parse(match.Value))
    .ToList();

जवाब

JohnathanBarclay Nov 23 2020 at 10:06

आप मूल्य के रूप में कुंजी और ईमेल के रूप में उपयोगकर्ता नाम के साथ एक शब्दकोश बना सकते हैं:

string pattern = @"Error importing username: (\d+), primary email: ([^,]+)";
var dict = Regex.Matches(error_message, pattern)
    .Cast<Match>()
    .ToDictionary(match => match.Groups[1], match => match.Groups[2]);

पैटर्न में 2 कैप्चरिंग समूह शामिल हैं, जिन्हें कोष्ठक द्वारा निरूपित किया गया है, जिसका उपयोग प्रत्येक मैच से उपयोगकर्ता नाम और ईमेल निकालने के लिए किया जा सकता है।

ईमेल पैटर्न [^,]+केवल एक या अधिक वर्णों से मेल खाता है जो अल्पविराम नहीं हैं; यह मान्य ईमेल पते सुनिश्चित नहीं करता है।

यदि यह एक आवश्यकता है, तो अधिक विवरण यहां पाया जा सकता है ।

काम करने का उदाहरण

Thefourthbird Nov 23 2020 at 10:10

एक एकल खोज के उपयोग के बजाय, आप 2 कैप्चरिंग समूहों का उपयोग कर सकते हैं।

\bError importing username: (\d+), primary email: ([^\s@]+@[^\s@,]+)

रेगेक्स डेमो | सी # डेमो

उदाहरण के लिए

string pattern = @"\bError importing username: (\d+), primary email: ([^\s@]+@[^\s@,]+)";
string input = @"string error_message= ""{\""2705\"":\""Error importing username: 3167763, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\"",\""10001\"":\""Error importing username: 3195330, primary email: [email protected], error: User already exists but Email does not match: [email protected] vs [email protected]\""}"";";

var collection = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(match => 
new {username = int.Parse(match.Groups[1].Value), primary_email = match.Groups[2].Value}
);

foreach (var item in collection) {
    Console.WriteLine("username: {0}, primary email: {1}", 
    item.username, 
    item.primary_email
    );
}

उत्पादन

username: 3167763, primary email: [email protected]
username: 3195330, primary email: [email protected]