স্ট্রিং প্যাটার্নের সাথে মেলে কিনা তা পরীক্ষা করুন


316

কোনও স্ট্রিং এই প্যাটার্নটির সাথে মেলে কিনা তা আমি কীভাবে পরীক্ষা করব?

বড় হাতের অক্ষর, সংখ্যা (গুলি), বড় হাতের অক্ষর, সংখ্যা (গুলি) ...

উদাহরণ, এটি মিলবে:

A1B2
B10L1
C1N200J1

এটি হবে না ('^' সমস্যার দিকে লক্ষ্য)

a1B2
^
A10B
   ^
AB400
^

3
আপনি দয়া করে আরও ব্যাখ্যা করতে পারেন কেন এটি সমস্যা?
জন উ

4
^([A-Z]\d+){1,}$এটার মত?
পাশেরবি

আপনার তৃতীয় উদাহরণে, সমস্যাটি হওয়া উচিত Bএবং সাথে নয় A
বুরহান খালিদ

সম্ভবত এটি সমস্যার টাইপ ত্রুটি। উভয় Aএবং Bছোট অক্ষর ঠিক আছে? A10bএবং aB400?
জন উ

@ বুরহান, সমস্যাটি এ এর ​​সাথে কারণ বি এর পাশের সংখ্যা রয়েছে এবং এ-তে নেই
ড্যানিয়েলটিএ

উত্তর:


464
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

সম্পাদনা: মন্তব্যে উল্লিখিত হিসাবে matchকেবল স্ট্রিংয়ের শুরুতে ম্যাচগুলির জন্য পরীক্ষা করে থাকে তবে স্ট্রিংয়ের re.search()যে কোনও জায়গায় কোনও প্যাটার্ন মিলবে। (আরও দেখুন: https://docs.python.org/library/re.html#search-vs-match )


20
ডক্স থেকে উপর re.match: If zero or more characters at the beginning of string match the regular expression pattern। আমি কেবল ৩০ মিনিটের মতো সময় কাটিয়েছি কেন স্ট্রিংয়ের শেষে আমি কিছু মেলে না তা বুঝতে চেষ্টা করে। দেখে মনে হচ্ছে এটি দিয়ে সম্ভব নয় match, তাই না? তার জন্য, re.search(pattern, my_string)যদিও কাজ করে।
conradkleinespel

2
@ কনরাডক হ্যাঁ, আপনি ঠিকই বলেছেন, আমি মনে করি ^আপনি যখন ব্যবহার করবেন তখন শুরুতে একটি অন্তর্নিহিত জাতীয় কিছু রয়েছে match। আমি মনে করি এটি তখন আরও জটিল, তবে খুব সাধারণ ব্যাখ্যা, তবে আমি পরিষ্কার নই। আপনি সঠিক যে এটি স্ট্রিংয়ের শুরু থেকেই শুরু হয়।
ক্রেজিস্টাস্টা

173

এক রৈখিক: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

আপনি boolপ্রয়োজন হিসাবে এটি বিবর্তন করতে পারেন

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True

import reপ্রথম লাইন হিসাবে নিখোঁজ
অ্যারোড করুন

এটা বিরক্তিকর. আপনি কেন re.matchএকটি প্রসঙ্গে ব্যবহার করতে পারেন if, তবে আপনি boolঅন্য কোথাও এটি ব্যবহার করছেন যদি আপনাকে ব্যবহার করতে হয়?
লন্ডনরব

16
যত্নশীল re.match। এটি কেবল একটি স্ট্রিংয়ের শুরুতে মেলে। re.searchপরিবর্তে একবার দেখুন ।
লন্ডনরব

@ লন্ডনরোব সম্ভবত ifম্যাচটি চেক না হওয়ার কারণে রয়েছে None
ডেনিস

খারাপ চরিত্রের পরিসীমা ত্রুটির মতো নিয়মিত এক্সপ্রেশনগুলিতে কোনও ত্রুটি নেই তা নিশ্চিত করার জন্য এখানে একটি বড় সংকলন প্রয়োজন
সুহ ফাংম্বেং

36

নিম্নলিখিত চেষ্টা করুন:

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())

1
গ্রুপগুলি পাওয়ার জন্য প্রয়োজনীয় ম্যাচটি এটিই একমাত্র ঘটনা। আমার মতে সেরা উত্তর।
রিক স্মিথ


7

নিয়মিত প্রকাশগুলি এটিকে সহজ করে তোলে ...

[A-Z] এ এবং জেড এর মধ্যে ঠিক একটি চরিত্রের সাথে মিলবে

\d+ এক বা একাধিক সংখ্যার সাথে মিলবে

() গ্রুপ জিনিস (এবং জিনিসগুলি ফেরত দেয় ... তবে আপাতত কেবল তাদের গ্রুপিংয়ের কথা ভাবেন)

+ 1 বা আরও বেশি নির্বাচন করে se


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