बिंदी लगाने के लिए नियमित अभिव्यक्ति


93

सोच रहा था सबसे अच्छा तरीका क्या मैच के लिए है "test.this"से "blah blah blah test.this@gmail.com blah blah"है? अजगर का उपयोग करना।

मैंने कोशिश की re.split(r"\b\w.\w@")


\wकेवल एक ही चरित्र से मेल खाता है - आप शायद चाहते हैं\w+
पीटर बॉटन

2
यदि आप एक की तलाश कर रहे हैं तो यहां एक ईमेल सत्यापन रेगेक्स है
चकमाश

जवाबों:


157

एक .regex, एक metacharacter है यह किसी भी चरित्र से मेल करने के लिए किया जाता है। शाब्दिक बिंदु से मेल खाने के लिए, आपको इससे बचने की जरूरत है, इसलिए\.


44

अपने रेगेक्स में आपको डॉट से बचने"\." या वर्ण वर्ग के अंदर उपयोग करने की आवश्यकता है "[.]", क्योंकि यह रेगेक्स में एक मेटा-चरित्र है, जो किसी भी चरित्र से मेल खाता है।

इसके अलावा, आपको एक या एक से अधिक शब्द वर्णों के मिलान के \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']

2
चरित्र वर्ग के लिए +1। जेनकिन्सफाइल से gcovr का उपयोग करना और डॉट निर्देशिकाओं को बाहर करने की कोशिश करना, और जेनकिंस को बचना क्रम समझ में नहीं आता है। चरित्र वर्ग ने खूबसूरती से काम किया।
जोनाथन लैंड्रम

13

"डिफ़ॉल्ट मोड में, 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'

0

डॉट्स सहित स्ट्रिंग चर के गैर-अल्फ़ान्यूमेरिक वर्णों से बचने के लिए, आप उपयोग कर सकते हैं re.escape:

import re

expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)

उत्पादन:

whatever\.v1\.dfc

आप स्ट्रिंग का शाब्दिक रूप से पता लगाने / मिलान करने के लिए बची हुई अभिव्यक्ति का उपयोग कर सकते हैं।


-1

जावास्क्रिप्ट में आपको \ N का उपयोग करना होगा। बिंदी लगाना।

उदाहरण

"blah.tests.zibri.org".match('test\\..*')
null

तथा

"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]

यह जेएस
पी-जेई

-2

यह अभिव्यक्ति,

(?<=\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 के शीर्ष दाएं पैनल पर समझाया गया है । यदि आप चाहें, तो आप इस लिंक में भी देख सकते हैं कि यह कुछ नमूना आदानों के साथ कैसे मेल खाता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.