वर्तमान में मैं मिश्रित सामग्री के साथ एक बड़ी टेक्स्ट फ़ाइल को पार्स करने का प्रयास कर रहा हूं। हालांकि मैं केवल उन पंक्तियों को फ़िल्टर करने में रूचि रखता हूं जो इस आवश्यकता को पूरा करते हैं।

ईमेल-वरीयता

मैं ईमेल के लिए रेगेक्स ढूंढने में सक्षम हूं हालांकि पूर्ववर्ती ":" टेक्स्ट में वरीयता के बाद वर्तमान में मेरी चुनौती है। "?" से मेल खाने वाला एकल वर्ण हालांकि बहुत मदद नहीं करता है।

इस पर किसी भी सुझाव की बहुत सराहना की जाएगी।

पाठ स्रोत से नमूना:

Warning: You are using an old IOS image for this router.
Sending 5, 100-byte ICMP Echos to abacus, timeout is 2 seconds:
Sending 5, 100-byte ICMP Echos to abacus, timeout is 2 seconds:
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
timeout tcp-proxy-reassembly 0:01:00
myemail@gmail.com-prefmenuonly
timeout floating-conn 0:00:00
  destination address http https://tools.cisco.com/its/service/oddce/services/DDCEService
Cryptochecksum:checksum
: end
Sending 5, 100-byte ICMP Echos to abacus, timeout is 2 seconds:
Sending 5, 100-byte ICMP Echos to abacus, timeout is 2 seconds:
secondmail@gmail.com-selectedprefonly

आउटपुट होना चाहिए:

Myemail@gmail.com-prefmenuonly

Secondmail@mail.com-sSelectedprefonly

0
My Email 25 मई 2018, 13:19

2 जवाब

सबसे बढ़िया उत्तर

पायथन बहुत शक्तिशाली भाषा है और रेगेक्स का अच्छा समर्थन है।

उपरोक्त कार्य नीचे दिए गए कोड के माध्यम से पूरा किया जा सकता है-

import re

txt = """
one can contact us at xays.adf@gmail.com, asd@cd.in, askdj123_23@sjsgdf-sdfsd.co.uk.in and so and so
"""

print(re.findall(r"[a-zA-z0-9_\-\.]+@[a-zA-z0-9_\-\.]+",txt))

आउटपुट होगा -

['xays.adf@gmail.com', 'asd@cd.in', 'askdj123_23@sjsgdf-sdfsd.co.uk.in']

इसी तरह यह आपके इनपुट स्ट्रिंग के लिए आउटपुट के नीचे पकड़ लेगा-

['myemail@gmail.com-prefmenuonly', 'secondmail@gmail.com-selectedprefonly']
0
Ravindra 26 मई 2018, 12:05

संपादित करें: चूंकि ओपी मैच की पूरी लाइन को प्रिंट करने के लिए कह रहा है, तो निम्नलिखित का उपयोग किया जाना चाहिए।

awk 'match($0,/[a-zA-Z]+@[a-zA-Z]+\.com/)' Input_file

निम्नलिखित awk यहां आपकी सहायता कर सकते हैं।

awk 'match($0,/[a-zA-Z]+@[a-zA-Z]+\.com/){print substr($0,RSTART,RLENGTH)}'  Input_file
0
RavinderSingh13 25 मई 2018, 14:14