بايثون3 مِن مدارس w3-33Python RegEx
اقتبس من ابراهيم حمادة في 23 مايو، 2021, 12:43 متنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
لغة RegEx في PythonRegEx ، و الذي هو اختصار لِ Regular Expression (التعبير المنظم) ، هو سلسلة من الأحرف التي تُشكل نمط بحث.
يمكن استخدام RegEx للتحقق مما إذا كانت السلسلة النصِّيَّة تحتوي على نمط البحث المحدد.وحدةْ أو مكتبةْ RegEx(RegEx Module)
يحتوي Python على حُزمة مدمجة تسمى re ، والتي يمكن استخدامها للعمل مع regular expressions.
استيراد الوحدة re:
import reRegEx في Python
عند استيراد وحدة re ، يمكنك البدء في استخدام regular expressions:
مثال
ابحث في السلسلة لمعرفة ما إذا كانت تبدأ بـ "The" وتنتهي بـ "Spain":
import re#Check if the string starts with "The" and ends with "Spain":
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)if x:
tab print("YES! We have a match!")
else:
tab print("No match")ستكون النتيجة:
YES! We have a match!
جربها بنفسك مِن ملف regex.pyوظائف RegEx
الوحدة re تُقدم لنا مجموعة من الوظائف التي تسمح لنا للبحث في سلسلة نصِّيَّة عن الجزء المطابق لِ regex:findall
إرجاع قائمة تحتوي على جميع التطابُقات
search
إرجاع كائن التطابُق, إذا كان هناك تطابق في أي مكان في السلسلة
split
إرجاع قائمة حيث تم تقسيم السلسلة النصِّيَّة عند كل تطابُق
sub
استبدال جزء أو أكثر مِن السلسلة النصِّيَّة, حيث يكون هناك تطابُقالحروف الأوَّلية(Metacharacters)
الحروف الأوَّلية هي أحرف لها معنى خاص:[]
مجموعة مِن الأحرف
"[a-m]"
مثال
import retxt = "The rain in Spain"
#Find all lower case characters alphabetically between "a" and "m":
x = re.findall("[a-m]", txt)
print(x)ستكون النتيجة:
['h', 'e', 'a', 'i', 'i', 'a', 'i']
Try it » مِن ملف regex_meta1.py\
تشير إلى تسلسل خاص (يمكن استخدامها أيضا لتمرير الأحرف الخاصة)
"\d"
مثال
import retxt = "That will be 59 dollars"
#Find all digit characters:
x = re.findall("\d", txt)
print(x)ستكون النتيجة:
['5', '9']
جربها بنفسك » مِن ملف regex_meta2.py.
أي حرف (باستثناء حرف السطر الجديد \n)
"he..o"
مثال
import retxt = "hello world"
#Search for a sequence that starts with "he", followed by two (any) characters, and an "o":
x = re.findall("he..o", txt)
print(x)ستكون النتيجة:
['hello']
جربها بنفسك » مِن ملف regex_meta3.py^
يبدأ بِ, يشير إلى البداية
"^hello"
مثال
import retxt = "hello world"
#Check if the string starts with 'hello':
x = re.findall("^hello", txt)
if x:
tab print("Yes, the string starts with 'hello'")
else:
tab print("No match")ستكون النتيجة:
Yes, the string starts with 'hello'
جربها بنفسك » مِن ملف regex_meta4.py$
ينتهي بِ, يشير إلى النهاية
"world$"
مثال
import retxt = "hello world"
#Check if the string ends with 'world':
x = re.findall("world$", txt)
if x:
tab print("Yes, the string ends with 'world'")
else:
tab print("No match")ستكون النتيجة:
Yes, the string ends with 'world'
جربها بنفسك » مِن ملف regex_meta5.py*
صفر مِن الحرف السابق أو أكثر
"aix*"
مثال
import retxt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "ai" followed by 0 or more "x" characters:
x = re.findall("aix*", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['ai', 'ai', 'ai', 'ai']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta6.py+
واحد أو أكثر مِن الحرف السابق
"aix+"
مثال
import retxt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "ai" followed by 1 or more "x" characters:
x = re.findall("aix+", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_meta7.py{}
بالضبط العدد المحدد من التكرارات
"al{2}"
مثال
import retxt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "a" followed by exactly two "l" characters:
x = re.findall("al{2}", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['all']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta8.py|
إما أو
"falls|stays"
مثال
import retxt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains either "falls" or "stays":
x = re.findall("falls|stays", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['falls']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta9.py()
التقاط مجموعة, () تُحدد المجموعةالتسلسلات الخاصة
التسلسل الخاص هو \متبوع بأحد الأحرف الموجودة في القائمة أدناه ، وله معنى خاص:\A
إرجاع تطابق إذا كانت الأحرف المحددة في بداية السلسلة
"\AThe"
مثال
import retxt = "The rain in Spain"
#Check if the string starts with "The":
x = re.findall("\AThe", txt)
print(x)
if x:
tab print("Yes, there is a match!")
else:
tab print("No match")ستكون النتيجة:
['The']
Yes, there is a match!
جربها بنفسك » مِن ملف regex_seq1.py\b
إرجاع تطابق حيث الأحرف المحددة هي في بداية أو في نهاية كلمة
(the "r" in the beginning is making sure that the string is being treated as a "raw string")
r"\bain"
r"ain\b"
مثال
import retxt = "The rain in Spain"
#Check if "ain" is present at the beginning of a WORD:
x = re.findall(r"\bain", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq2.pyمثال
import retxt = "The rain in Spain"
#Check if "ain" is present at the end of a WORD:
x = re.findall(r"ain\b", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['ain', 'ain']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq2-.py\B
إرجاع تطابُق حيث الأحرف المحددة موجودة ، ولكن ليس في بدايةْ (أو في نهايةْ) الكلمة
(the "r" in the beginning is making sure that the string is being treated as a "raw string")
r"\Bain"
r"ain\B"
مثال
import retxt = "The rain in Spain"
#Check if "ain" is present, but NOT at the beginning of a word:
x = re.findall(r"\Bain", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['ain', 'ain']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq3.pyمثال
import retxt = "The rain in Spain"
#Check if "ain" is present, but NOT at the end of a word:
x = re.findall(r"ain\B", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq3-2.py\d
إرجاع تطابُق حيث تحتوي السلسلة على أرقام (أرقام من 0-9)
"\d"
مثال
import retxt = "The rain in Spain"
#Check if the string contains any digits (numbers from 0-9):
x = re.findall("\d", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq4.py\D
إرجاع تطابق حيث لا تحتوي السلسلة على أرقام
"\D"
مثال
import retxt = "The rain in Spain"
#Return a match at every no-digit character:
x = re.findall("\D", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['T', 'h', 'e', ' ', 'r', 'a', 'i', 'n', ' ', 'i', 'n', ' ', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq5.py\s
إرجاع تطابُق حيث تحتوي السلسلة على حرف مساحة بيضاء
"\s"
مثال
import retxt = "The rain in Spain"
#Return a match at every white-space character:
x = re.findall("\s", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[' ', ' ', ' ']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq6.py\S
إرجاع تطابُق حيث لا تحتوي السلسلة على حرف مساحة بيضاء
"\S"
مثال
import retxt = "The rain in Spain"
#Return a match at every NON white-space character:
x = re.findall("\S", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['T', 'h', 'e', 'r', 'a', 'i', 'n', 'i', 'n', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq7.py\w
إرجاع تطابق حيث تحتوي السلسلة على أي أحرف مِن الكلمة (أحرف من a إلى z ، أرقام من 0-9 ، وحرف _ underscore)
"\w"
مثال
import retxt = "The rain in Spain"
#Return a match at every word character (characters from a to Z, digits from 0-9, and the underscore _ character):
x = re.findall("\w", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['T', 'h', 'e', 'r', 'a', 'i', 'n', 'i', 'n', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq8.py\W
إرجاع تطابُق حيث لا تحتوي السلسلة على أي أحرف مِن الكلمة
"\W"
مثال
import retxt = "The rain in Spain"
#Return a match at every NON word character (characters NOT between a and Z. Like "!", "?" white-space etc.):
x = re.findall("\W", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[' ', ' ', ' ']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq9.py\Z
إرجاع تطابق إذا كانت الأحرف المحددة في نهاية السلسلة
"Spain\Z"
مثال
import retxt = "The rain in Spain"
#Check if the string ends with "Spain":
x = re.findall("Spain\Z", txt)
print(x)
if x:
tab print("Yes, there is a match!")
else:
tab print("No match")ستكون النتيجة:
['Spain']
Yes, there is a match!
جربها بنفسك » مِن ملف regex_seq10.pyالمجموعات
المجموعة عبارة عن مجموعة من الأحرف داخل زوج من الأقواس المرَبعة []ذات معنى خاص:[arn]
إرجاع تطابق حيث يوجد أحد الأحرف المحددة (a أو r أو n)
مثال
import retxt = "The rain in Spain"
#Check if the string has any a, r, or n characters:
x = re.findall("[arn]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['r', 'a', 'n', 'n', 'a', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set1.py[a-n]
إرجاع تطابُق لأي حرف صغير ، مِن الأبجديَّة الإنجليزية بين a و n
مثال
import retxt = "The rain in Spain"
#Check if the string has any characters between a and n:
x = re.findall("[a-n]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['h', 'e', 'a', 'i', 'n', 'i', 'n', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set2.py[^arn]
إرجاع تطابُق لأي حرف باستثناء a و r و n
مثال
import retxt = "The rain in Spain"
#Check if the string has other characters than a, r, or n:
x = re.findall("[^arn]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['T', 'h', 'e', ' ', 'i', ' ', 'i', ' ', 'S', 'p', 'i']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set3.py[0123]
إرجاع تطابق حيث يوجد أي من الأرقام المحددة (0 أو 1 أو 2 أو 3)
مثال
import retxt = "The rain in Spain"
#Check if the string has any 0, 1, 2, or 3 digits:
x = re.findall("[0123]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_set4.py[0-9]
إرجاع تطابق لأي رقم بين 0 و 9
مثال
import retxt = "8 times before 11:45 AM"
#Check if the string has any digits:
x = re.findall("[0-9]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['8', '1', '1', '4', '5']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set5.py[0-5][0-9]
إرجاع تطابق لأي رقم من خانتين مِن 00 إلى 59
مثال
import retxt = "8 times before 11:45 AM"
#Check if the string has any two-digit numbers, from 00 to 59:
x = re.findall("[0-5][0-9]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['11', '45']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set6.py[a-zA-Z]
إرجاع تطابق لأي حرف أبجدي بين a و z ، حالة حرف صغير أو كبير
مثال
import retxt = "8 times before 11:45 AM"
#Check if the string has any characters from a to z lower case, and A to Z upper case:
x = re.findall("[a-zA-Z]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
['t', 'i', 'm', 'e', 's', 'b', 'e', 'f', 'o', 'r', 'e', 'A', 'M']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set7.py[+]
في المجموعات, +, *, ., |, (), $,{} ليس لهم معنى خاص ، لذلك [+] يعني: إرجاع تطابق لأي علامةْ + في السلسلة
مثال
import retxt = "8 times before 11:45 AM"
#Check if the string has any + characters:
x = re.findall("[+]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_set8.pyدالة findall ()
تقوم الوظيفة findall() بإرجاع قائمة تحتوي على جميع التطابقات.
مثال
طباعة قائمة بكافة التطابقات:
import retxt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)ستكون النتيجة:
['ai', 'ai']
جربها بنفسك مِن ملف regex_findall.py
تحتوي القائمة على التطابقات بترتيب العثور عليها.
إذا لم يتم العثور على تطابقات، يتم إرجاع قائمة فارغة:
المثال
إرجاع قائمة فارغة إذا لم يتم العثور على تطابق:
import retxt = "The rain in Spain"
#Check if "Portugal" is in the string:
x = re.findall("Portugal", txt)
print(x)if (x):
tab print("Yes, there is at least one match!")
else:
tab print("No match")ستكون النتيجة:
[]
No match
جربها بنفسك مِن ملف regex_findall2.pyالوظيفة search()
تبحث الدالة search() في السلسلة عن تطابق، وتقوم بإرجاع كائن مطابقة إذا كان هناك تطابق.
إذا كان هناك أكثر من تطابق، سيتم إرجاع التواجد الأول فقط للتَطابق:
مثال
البحث عن أول حرف مسافة بيضاء في السلسلة:
import retxt = "The rain in Spain"
x = re.search("\s", txt)print("The first white-space character is located in position:", x.start())
ستكون النتيجة:
The first white-space character is located in position: 3
جربها بنفسك مِن ملف regex_search.pyإذا لم يتم العثور على تطابقات، يتم إرجاع القيمة None
مثال
إجراء بحث لا يقوم بإرجاع أي تطابق:
import retxt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)ستكون النتيجة:
None
جربها بنفسك مِن ملف regex_search2.pyالدالة split()
الدالة split() تقوم بإرجاع قائمة حيث تم تقسيم السلسلة عند كل تطابق:
مثال
تقسيم عند كل حرف مسافة بيضاء:
import retxt = "The rain in Spain"
x = re.split("\s", txt)
print(x)ستكون النتيجة:
['The', 'rain', 'in', 'Spain']
جربها بنفسك مِن ملف regex_split.pyيمكنك التحكم في عدد مرات التقسيم عن طريق تحديد المعامِل maxsplit
مثال
تقسيم السلسلة فقط عند التواجد الأول:
import retxt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)ستكون النتيجة:
['The', 'rain in Spain']
جربها بنفسك مِن ملف regex_split2.pyالوظيفة sub()
الدالة sub() تستبدل التطابقات مع النص الذي تختارُه:
مثال
استبدال كل حرف مسافة بيضاء بالرقم 9:
import retxt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)ستكون النتيجة:
The9rain9in9Spain
جربها بنفسك مِن ملف regex_sub.pyيمكنك التحكم في عدد الاستبدالات عن طريق تحديد المعامِل count :
مثال
استبدال أول مرتين للتواجُد:
import retxt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)ستكون النتيجة:
The9rain9in Spain
جربها بنفسك مِن ملف regex_sub2.pyكائن التطابُق(Match Object)
كائن التطابُق أو المطابقة هو كائن يحتوي على معلومات حول البحث والنتيجة.
ملاحظة: إذا لم يكن هناك تطابق، سيتم إرجاع القيمة None بدلاً من كائن المطابَقة.
مثال
القيام بالبحث الذي سيقوم بإرجاع كائن مطابَقة:
import retxt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #this will print an objectستكون النتيجة:
<_sre.SRE_Match object; span=(5, 7), match='ai'>
جربها بنفسك مِن ملف regex_match.pyيحتوي كائن Match على خصائص و وظائف تُستخدم لاسترداد معلومات حول البحث ، والنتيجة:
.span() تُرجع مصفوفة(tuple) تحتوي على مواضع البداية والنهاية للتطابُق.
.stringتُرجع السلسلة التي تم تمريرها إلى الدالة
.group() إرجاع جزء السلسلة حيث كان هناك تطابق
مثال
طباعة موضع (البدء- و موضع النهاية) من تواجد التطابق الأول.
يبحث هذا ال regular expression عن أي كلمات تبدأ بحرف كبير "S":
import retxt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())ستكون النتيجة:
(12, 17)
جربها بنفسك مِن ملف regex_match_span.pyمثال
طباعة السلسلة التي تم تمريرها إلى الدالة:
import retxt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)ستكون النتيجة:
The rain in Spain
جربها بنفسك مِن ملف regex_match_string.pyمثال
طباعة الجزء من السلسلة حيث كان هناك تطابق.
يبحث ال regular expression عن أي كلمات تبدأ بحرف كبير "S":
import retxt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())ستكون النتيجة:
Spain
جربها بنفسك مِن ملف regex_match_group.py
ملاحظة: إذا لم يكن هناك تطابق ، فسيتم إرجاع القيمة None بدلاً من كائن المطابَقة.الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/6nyl55qfzbrg14o/33Python%20RegEx.zip?dl=1
تنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
لغة RegEx في Python
RegEx ، و الذي هو اختصار لِ Regular Expression (التعبير المنظم) ، هو سلسلة من الأحرف التي تُشكل نمط بحث.
يمكن استخدام RegEx للتحقق مما إذا كانت السلسلة النصِّيَّة تحتوي على نمط البحث المحدد.
وحدةْ أو مكتبةْ RegEx(RegEx Module)
يحتوي Python على حُزمة مدمجة تسمى re ، والتي يمكن استخدامها للعمل مع regular expressions.
استيراد الوحدة re:
import re
RegEx في Python
عند استيراد وحدة re ، يمكنك البدء في استخدام regular expressions:
مثال
ابحث في السلسلة لمعرفة ما إذا كانت تبدأ بـ "The" وتنتهي بـ "Spain":
import re
#Check if the string starts with "The" and ends with "Spain":
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
if x:
tab print("YES! We have a match!")
else:
tab print("No match")
ستكون النتيجة:
YES! We have a match!
جربها بنفسك مِن ملف regex.py
وظائف RegEx
الوحدة re تُقدم لنا مجموعة من الوظائف التي تسمح لنا للبحث في سلسلة نصِّيَّة عن الجزء المطابق لِ regex:
findall
إرجاع قائمة تحتوي على جميع التطابُقات
search
إرجاع كائن التطابُق, إذا كان هناك تطابق في أي مكان في السلسلة
split
إرجاع قائمة حيث تم تقسيم السلسلة النصِّيَّة عند كل تطابُق
sub
استبدال جزء أو أكثر مِن السلسلة النصِّيَّة, حيث يكون هناك تطابُق
الحروف الأوَّلية(Metacharacters)
الحروف الأوَّلية هي أحرف لها معنى خاص:
[]
مجموعة مِن الأحرف
"[a-m]"
مثال
import re
txt = "The rain in Spain"
#Find all lower case characters alphabetically between "a" and "m":
x = re.findall("[a-m]", txt)
print(x)
ستكون النتيجة:
['h', 'e', 'a', 'i', 'i', 'a', 'i']
Try it » مِن ملف regex_meta1.py
\
تشير إلى تسلسل خاص (يمكن استخدامها أيضا لتمرير الأحرف الخاصة)
"\d"
مثال
import re
txt = "That will be 59 dollars"
#Find all digit characters:
x = re.findall("\d", txt)
print(x)
ستكون النتيجة:
['5', '9']
جربها بنفسك » مِن ملف regex_meta2.py
.
أي حرف (باستثناء حرف السطر الجديد \n)
"he..o"
مثال
import re
txt = "hello world"
#Search for a sequence that starts with "he", followed by two (any) characters, and an "o":
x = re.findall("he..o", txt)
print(x)
ستكون النتيجة:
['hello']
جربها بنفسك » مِن ملف regex_meta3.py
^
يبدأ بِ, يشير إلى البداية
"^hello"
مثال
import re
txt = "hello world"
#Check if the string starts with 'hello':
x = re.findall("^hello", txt)
if x:
tab print("Yes, the string starts with 'hello'")
else:
tab print("No match")
ستكون النتيجة:
Yes, the string starts with 'hello'
جربها بنفسك » مِن ملف regex_meta4.py
$
ينتهي بِ, يشير إلى النهاية
"world$"
مثال
import re
txt = "hello world"
#Check if the string ends with 'world':
x = re.findall("world$", txt)
if x:
tab print("Yes, the string ends with 'world'")
else:
tab print("No match")
ستكون النتيجة:
Yes, the string ends with 'world'
جربها بنفسك » مِن ملف regex_meta5.py
*
صفر مِن الحرف السابق أو أكثر
"aix*"
مثال
import re
txt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "ai" followed by 0 or more "x" characters:
x = re.findall("aix*", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['ai', 'ai', 'ai', 'ai']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta6.py
+
واحد أو أكثر مِن الحرف السابق
"aix+"
مثال
import re
txt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "ai" followed by 1 or more "x" characters:
x = re.findall("aix+", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_meta7.py
{}
بالضبط العدد المحدد من التكرارات
"al{2}"
مثال
import re
txt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains "a" followed by exactly two "l" characters:
x = re.findall("al{2}", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['all']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta8.py
|
إما أو
"falls|stays"
مثال
import re
txt = "The rain in Spain falls mainly in the plain!"
#Check if the string contains either "falls" or "stays":
x = re.findall("falls|stays", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['falls']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_meta9.py
()
التقاط مجموعة, () تُحدد المجموعة
التسلسلات الخاصة
التسلسل الخاص هو \متبوع بأحد الأحرف الموجودة في القائمة أدناه ، وله معنى خاص:
\A
إرجاع تطابق إذا كانت الأحرف المحددة في بداية السلسلة
"\AThe"
مثال
import re
txt = "The rain in Spain"
#Check if the string starts with "The":
x = re.findall("\AThe", txt)
print(x)
if x:
tab print("Yes, there is a match!")
else:
tab print("No match")
ستكون النتيجة:
['The']
Yes, there is a match!
جربها بنفسك » مِن ملف regex_seq1.py
\b
إرجاع تطابق حيث الأحرف المحددة هي في بداية أو في نهاية كلمة
(the "r" in the beginning is making sure that the string is being treated as a "raw string")
r"\bain"
r"ain\b"
مثال
import re
txt = "The rain in Spain"
#Check if "ain" is present at the beginning of a WORD:
x = re.findall(r"\bain", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq2.py
مثال
import re
txt = "The rain in Spain"
#Check if "ain" is present at the end of a WORD:
x = re.findall(r"ain\b", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['ain', 'ain']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq2-.py
\B
إرجاع تطابُق حيث الأحرف المحددة موجودة ، ولكن ليس في بدايةْ (أو في نهايةْ) الكلمة
(the "r" in the beginning is making sure that the string is being treated as a "raw string")
r"\Bain"
r"ain\B"
مثال
import re
txt = "The rain in Spain"
#Check if "ain" is present, but NOT at the beginning of a word:
x = re.findall(r"\Bain", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['ain', 'ain']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq3.py
مثال
import re
txt = "The rain in Spain"
#Check if "ain" is present, but NOT at the end of a word:
x = re.findall(r"ain\B", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq3-2.py
\d
إرجاع تطابُق حيث تحتوي السلسلة على أرقام (أرقام من 0-9)
"\d"
مثال
import re
txt = "The rain in Spain"
#Check if the string contains any digits (numbers from 0-9):
x = re.findall("\d", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_seq4.py
\D
إرجاع تطابق حيث لا تحتوي السلسلة على أرقام
"\D"
مثال
import re
txt = "The rain in Spain"
#Return a match at every no-digit character:
x = re.findall("\D", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['T', 'h', 'e', ' ', 'r', 'a', 'i', 'n', ' ', 'i', 'n', ' ', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq5.py
\s
إرجاع تطابُق حيث تحتوي السلسلة على حرف مساحة بيضاء
"\s"
مثال
import re
txt = "The rain in Spain"
#Return a match at every white-space character:
x = re.findall("\s", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[' ', ' ', ' ']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq6.py
\S
إرجاع تطابُق حيث لا تحتوي السلسلة على حرف مساحة بيضاء
"\S"
مثال
import re
txt = "The rain in Spain"
#Return a match at every NON white-space character:
x = re.findall("\S", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['T', 'h', 'e', 'r', 'a', 'i', 'n', 'i', 'n', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq7.py
\w
إرجاع تطابق حيث تحتوي السلسلة على أي أحرف مِن الكلمة (أحرف من a إلى z ، أرقام من 0-9 ، وحرف _ underscore)
"\w"
مثال
import re
txt = "The rain in Spain"
#Return a match at every word character (characters from a to Z, digits from 0-9, and the underscore _ character):
x = re.findall("\w", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['T', 'h', 'e', 'r', 'a', 'i', 'n', 'i', 'n', 'S', 'p', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq8.py
\W
إرجاع تطابُق حيث لا تحتوي السلسلة على أي أحرف مِن الكلمة
"\W"
مثال
import re
txt = "The rain in Spain"
#Return a match at every NON word character (characters NOT between a and Z. Like "!", "?" white-space etc.):
x = re.findall("\W", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[' ', ' ', ' ']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_seq9.py
\Z
إرجاع تطابق إذا كانت الأحرف المحددة في نهاية السلسلة
"Spain\Z"
مثال
import re
txt = "The rain in Spain"
#Check if the string ends with "Spain":
x = re.findall("Spain\Z", txt)
print(x)
if x:
tab print("Yes, there is a match!")
else:
tab print("No match")
ستكون النتيجة:
['Spain']
Yes, there is a match!
جربها بنفسك » مِن ملف regex_seq10.py
المجموعات
المجموعة عبارة عن مجموعة من الأحرف داخل زوج من الأقواس المرَبعة []ذات معنى خاص:
[arn]
إرجاع تطابق حيث يوجد أحد الأحرف المحددة (a أو r أو n)
مثال
import re
txt = "The rain in Spain"
#Check if the string has any a, r, or n characters:
x = re.findall("[arn]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['r', 'a', 'n', 'n', 'a', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set1.py
[a-n]
إرجاع تطابُق لأي حرف صغير ، مِن الأبجديَّة الإنجليزية بين a و n
مثال
import re
txt = "The rain in Spain"
#Check if the string has any characters between a and n:
x = re.findall("[a-n]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['h', 'e', 'a', 'i', 'n', 'i', 'n', 'a', 'i', 'n']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set2.py
[^arn]
إرجاع تطابُق لأي حرف باستثناء a و r و n
مثال
import re
txt = "The rain in Spain"
#Check if the string has other characters than a, r, or n:
x = re.findall("[^arn]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['T', 'h', 'e', ' ', 'i', ' ', 'i', ' ', 'S', 'p', 'i']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set3.py
[0123]
إرجاع تطابق حيث يوجد أي من الأرقام المحددة (0 أو 1 أو 2 أو 3)
مثال
import re
txt = "The rain in Spain"
#Check if the string has any 0, 1, 2, or 3 digits:
x = re.findall("[0123]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_set4.py
[0-9]
إرجاع تطابق لأي رقم بين 0 و 9
مثال
import re
txt = "8 times before 11:45 AM"
#Check if the string has any digits:
x = re.findall("[0-9]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['8', '1', '1', '4', '5']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set5.py
[0-5][0-9]
إرجاع تطابق لأي رقم من خانتين مِن 00 إلى 59
مثال
import re
txt = "8 times before 11:45 AM"
#Check if the string has any two-digit numbers, from 00 to 59:
x = re.findall("[0-5][0-9]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['11', '45']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set6.py
[a-zA-Z]
إرجاع تطابق لأي حرف أبجدي بين a و z ، حالة حرف صغير أو كبير
مثال
import re
txt = "8 times before 11:45 AM"
#Check if the string has any characters from a to z lower case, and A to Z upper case:
x = re.findall("[a-zA-Z]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
['t', 'i', 'm', 'e', 's', 'b', 'e', 'f', 'o', 'r', 'e', 'A', 'M']
Yes, there is at least one match!
جربها بنفسك » مِن ملف regex_set7.py
[+]
في المجموعات, +, *, ., |, (), $,{} ليس لهم معنى خاص ، لذلك [+] يعني: إرجاع تطابق لأي علامةْ + في السلسلة
مثال
import re
txt = "8 times before 11:45 AM"
#Check if the string has any + characters:
x = re.findall("[+]", txt)
print(x)
if x:
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك » مِن ملف regex_set8.py
دالة findall ()
تقوم الوظيفة findall() بإرجاع قائمة تحتوي على جميع التطابقات.
مثال
طباعة قائمة بكافة التطابقات:
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
ستكون النتيجة:
['ai', 'ai']
جربها بنفسك مِن ملف regex_findall.py
تحتوي القائمة على التطابقات بترتيب العثور عليها.
إذا لم يتم العثور على تطابقات، يتم إرجاع قائمة فارغة:
المثال
إرجاع قائمة فارغة إذا لم يتم العثور على تطابق:
import re
txt = "The rain in Spain"
#Check if "Portugal" is in the string:
x = re.findall("Portugal", txt)
print(x)
if (x):
tab print("Yes, there is at least one match!")
else:
tab print("No match")
ستكون النتيجة:
[]
No match
جربها بنفسك مِن ملف regex_findall2.py
الوظيفة search()
تبحث الدالة search() في السلسلة عن تطابق، وتقوم بإرجاع كائن مطابقة إذا كان هناك تطابق.
إذا كان هناك أكثر من تطابق، سيتم إرجاع التواجد الأول فقط للتَطابق:
مثال
البحث عن أول حرف مسافة بيضاء في السلسلة:
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("The first white-space character is located in position:", x.start())
ستكون النتيجة:
The first white-space character is located in position: 3
جربها بنفسك مِن ملف regex_search.py
إذا لم يتم العثور على تطابقات، يتم إرجاع القيمة None
مثال
إجراء بحث لا يقوم بإرجاع أي تطابق:
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
ستكون النتيجة:
None
جربها بنفسك مِن ملف regex_search2.py
الدالة split()
الدالة split() تقوم بإرجاع قائمة حيث تم تقسيم السلسلة عند كل تطابق:
مثال
تقسيم عند كل حرف مسافة بيضاء:
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
ستكون النتيجة:
['The', 'rain', 'in', 'Spain']
جربها بنفسك مِن ملف regex_split.py
يمكنك التحكم في عدد مرات التقسيم عن طريق تحديد المعامِل maxsplit
مثال
تقسيم السلسلة فقط عند التواجد الأول:
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
ستكون النتيجة:
['The', 'rain in Spain']
جربها بنفسك مِن ملف regex_split2.py
الوظيفة sub()
الدالة sub() تستبدل التطابقات مع النص الذي تختارُه:
مثال
استبدال كل حرف مسافة بيضاء بالرقم 9:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
ستكون النتيجة:
The9rain9in9Spain
جربها بنفسك مِن ملف regex_sub.py
يمكنك التحكم في عدد الاستبدالات عن طريق تحديد المعامِل count :
مثال
استبدال أول مرتين للتواجُد:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
ستكون النتيجة:
The9rain9in Spain
جربها بنفسك مِن ملف regex_sub2.py
كائن التطابُق(Match Object)
كائن التطابُق أو المطابقة هو كائن يحتوي على معلومات حول البحث والنتيجة.
ملاحظة: إذا لم يكن هناك تطابق، سيتم إرجاع القيمة None بدلاً من كائن المطابَقة.
مثال
القيام بالبحث الذي سيقوم بإرجاع كائن مطابَقة:
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #this will print an object
ستكون النتيجة:
<_sre.SRE_Match object; span=(5, 7), match='ai'>
جربها بنفسك مِن ملف regex_match.py
يحتوي كائن Match على خصائص و وظائف تُستخدم لاسترداد معلومات حول البحث ، والنتيجة:
.span() تُرجع مصفوفة(tuple) تحتوي على مواضع البداية والنهاية للتطابُق.
.stringتُرجع السلسلة التي تم تمريرها إلى الدالة
.group() إرجاع جزء السلسلة حيث كان هناك تطابق
مثال
طباعة موضع (البدء- و موضع النهاية) من تواجد التطابق الأول.
يبحث هذا ال regular expression عن أي كلمات تبدأ بحرف كبير "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
ستكون النتيجة:
(12, 17)
جربها بنفسك مِن ملف regex_match_span.py
مثال
طباعة السلسلة التي تم تمريرها إلى الدالة:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
ستكون النتيجة:
The rain in Spain
جربها بنفسك مِن ملف regex_match_string.py
مثال
طباعة الجزء من السلسلة حيث كان هناك تطابق.
يبحث ال regular expression عن أي كلمات تبدأ بحرف كبير "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
ستكون النتيجة:
Spain
جربها بنفسك مِن ملف regex_match_group.py
ملاحظة: إذا لم يكن هناك تطابق ، فسيتم إرجاع القيمة None بدلاً من كائن المطابَقة.
الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/6nyl55qfzbrg14o/33Python%20RegEx.zip?dl=1