একটি বিন্দু মেলে নিয়মিত প্রকাশ


94

হতাশ ছিল সবচেয়ে ভালো উপায় কি মেলে হয় "test.this"থেকে "blah blah blah test.this@gmail.com blah blah"যায়? পাইথন ব্যবহার করা।

আমি চেষ্টা করেছিলাম re.split(r"\b\w.\w@")


\wকেবলমাত্র একটি একটি চরিত্রের সাথে মেলে - আপনি সম্ভবত চান\w+
পিটার বাটন

উত্তর:


161

.ইন রেজেক্স একটি মেটাচার্যাক্টর, এটি যে কোনও চরিত্রের সাথে মেলে। একটি আক্ষরিক বিন্দু মেলে, আপনার এটি এড়ানো প্রয়োজন, তাই\.


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']

4
অক্ষর শ্রেণীর জন্য +1। জেনকিনসফাইল থেকে gcovr ব্যবহার করে এবং ডট ডিরেক্টরিগুলি বাদ দেওয়ার চেষ্টা করা হয়েছে, এবং জেনকিন্স পালানোর ক্রমগুলি বুঝতে পারে না। চরিত্র শ্রেণিটি সুন্দরভাবে কাজ করেছিল।
জোনাথন ল্যান্ড্রাম

13

"ডিফল্ট মোডে ডট (।) একটি নতুন লাইন ব্যতীত অন্য কোনও অক্ষরের সাথে মেলে the (অজগর ডক)

সুতরাং, আপনি যদি ডটকে সাহিত্যের সাথে মূল্যায়ন করতে চান তবে আমার মনে হয় আপনার এটি স্কোয়ার বন্ধনীতে রাখা উচিত:

>>> 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

জাভাস্ক্রিপ্টে আপনাকে use ব্যবহার করতে হবে \ একটি বিন্দু মেলে

উদাহরণ

"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]

এটি জেএস নয় পাইথনের জন্য জিজ্ঞাসা করে
pl-jay

-2

এই অভিব্যক্তি,

(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)

সেই নির্দিষ্ট ধরণের ইনপুট স্ট্রিংগুলির জন্য ঠিক আছে work

ডেমো

পরীক্ষা

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 এর ডানদিকের প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.