सोच रहा था सबसे अच्छा तरीका क्या मैच के लिए है "test.this"से "blah blah blah test.this@gmail.com blah blah"है? अजगर का उपयोग करना।
मैंने कोशिश की re.split(r"\b\w.\w@")
सोच रहा था सबसे अच्छा तरीका क्या मैच के लिए है "test.this"से "blah blah blah test.this@gmail.com blah blah"है? अजगर का उपयोग करना।
मैंने कोशिश की re.split(r"\b\w.\w@")
जवाबों:
अपने रेगेक्स में आपको डॉट से बचने"\." या वर्ण वर्ग के अंदर उपयोग करने की आवश्यकता है "[.]", क्योंकि यह रेगेक्स में एक मेटा-चरित्र है, जो किसी भी चरित्र से मेल खाता है।
इसके अलावा, आपको एक या एक से अधिक शब्द वर्णों के मिलान के \w+बजाय की आवश्यकता है \w।
अब, यदि आप test.thisसामग्री चाहते हैं , तो splitवह नहीं है जो आपको चाहिए। splitके आसपास अपनी स्ट्रिंग विभाजित करेगा test.this। उदाहरण के लिए:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
आप उपयोग कर सकते हैं re.findall:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
"डिफ़ॉल्ट मोड में, Dot (।) एक नई रेखा को छोड़कर किसी भी वर्ण से मेल खाता है। यदि DOTALL ध्वज निर्दिष्ट किया गया है, तो यह किसी भी वर्ण से मेल खाता है। (अजगर डॉक्टर)
इसलिए, यदि आप डॉट साक्षर का मूल्यांकन करना चाहते हैं, तो मुझे लगता है कि आपको इसे वर्ग कोष्ठक में रखना चाहिए:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
डॉट्स सहित स्ट्रिंग चर के गैर-अल्फ़ान्यूमेरिक वर्णों से बचने के लिए, आप उपयोग कर सकते हैं re.escape:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
उत्पादन:
whatever\.v1\.dfc
आप स्ट्रिंग का शाब्दिक रूप से पता लगाने / मिलान करने के लिए बची हुई अभिव्यक्ति का उपयोग कर सकते हैं।
यह अभिव्यक्ति,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
उन विशिष्ट प्रकार के इनपुट स्ट्रिंग्स के लिए भी ठीक काम कर सकता है।
import re
expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''
matches = re.findall(expression, string)
print(matches)
['test.this']
यदि आप अभिव्यक्ति को सरल / संशोधित / संशोधित करना चाहते हैं, तो इसे regex101.com के शीर्ष दाएं पैनल पर समझाया गया है । यदि आप चाहें, तो आप इस लिंक में भी देख सकते हैं कि यह कुछ नमूना आदानों के साथ कैसे मेल खाता है।
\wकेवल एक ही चरित्र से मेल खाता है - आप शायद चाहते हैं\w+