الفرق بين المراجعتين لصفحة: «Python/re/split»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>re.split()</code> في بايثون}}</noinclude> تقسم الدالة السلسلة النصية عند كل مكا...' |
لا ملخص تعديل |
||
(5 مراجعات متوسطة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 26: | سطر 26: | ||
== القيمة المعادة == | == القيمة المعادة == | ||
تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى. إن استُخدمت أقواس التقاط القيمة ضمن النمط، فإنّ النصّ التابع لجميع المجموعات ضمن النمط سيُعاد كجزء من القائمة الناتجة. | تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى. إن استُخدمت أقواس التقاط القيمة ضمن النمط، فإنّ النصّ التابع لجميع المجموعات ضمن النمط سيُعاد كجزء من القائمة الناتجة. | ||
== ملاحظات == | |||
لا تقسم الدالة <code>split()</code> في الوقت الحاضر السلسلة النصية عند ظهور حالات تطابق فارغة، فعلى سبيل المثال:<syntaxhighlight lang="python3"> | |||
>>> re.split('x*', 'axbc') | |||
['a', 'bc'] | |||
</syntaxhighlight>صحيح أنّ نتيجة مطابقة التعبير <code>'x*'</code> هي العثور على <code>0</code> حالة تطابق قبل الحرف <code>'a'</code> وبين الحرفين <code>'b'</code> و <code>'c'</code> وبعد الحرف <code>'c'</code> إلا أنّ اللغة تتجاهل حالات التطابق هذه في الوقت الحاضر. يفترض بهذه الدالة أن تقسم السلسلة النصية عند حالات التطابق الفارغة أيضًا وتعيد القائمة <code>[<nowiki>''</nowiki>, 'a', 'b', 'c', <nowiki>''</nowiki>]</code>، وهذا ما ستتضمّنه الإصدارات المستقبلية من اللغة، ولمّا كان هذا التغيير غير متوافق مع الإصدارات السابقة، فإنّ اللغة تطلق التحذير <code>FutureWarning</code> في الوقت الحاضر. | |||
لا تقسّم الأنماط التي تطابق سلاسل نصية فارغة السلاسل النصية في الوقت الحاضر، وهذا لا يتّفق مع السلوك المتوقّع من الدالة، لذا فإنّ اللغة تطلق الخطأ <code>[[Python/built-in exceptions#ValueError|ValueError]]</code> في الإصدار 3.5 وما بعده:<syntaxhighlight lang="python3"> | |||
>>> re.split("^$", "foo\n\nbar\n", flags=re.M) | |||
Traceback (most recent call last): | |||
File "<stdin>", line 1, in <module> | |||
... | |||
ValueError: split() requires a non-empty pattern match. | |||
</syntaxhighlight>'''ملاحظة:''' أضيف معامل الرايات الاختياري في الإصدار 3.1 من اللغة. | |||
'''ملاحظة:''' في الإصدار 3.5 من اللغة يؤدي إجراء عملية التقسيم التي قد تطابق سلسلة نصية فارغة إلى إطلاق تحذير. أما الأنماط التي لا تطابق سوى السلاسل النصية فأصبحت مرفوضة. | |||
== أمثلة == | == أمثلة == | ||
سطر 31: | سطر 47: | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
>>> re.split(r' | >>> import re | ||
>>> re.split(r'\W+', 'Words, words, words.') | |||
['Words', 'words', 'words', ''] | ['Words', 'words', 'words', ''] | ||
>>> re.split(r'( | >>> re.split(r'(\W+)', 'Words, words, words.') | ||
['Words', ', ', 'words', ', ', 'words', '.', ''] | ['Words', ', ', 'words', ', ', 'words', '.', ''] | ||
>>> re.split(r' | >>> re.split(r'\W+', 'Words, words, words.', 1) | ||
['Words', 'words, words.'] | ['Words', 'words, words.'] | ||
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE) | |||
['0', '3', '9'] | |||
</syntaxhighlight> | </syntaxhighlight> | ||
إن كان هناك مجموعات التقاط (capturing groups) ضمن الفاصل وحصلت حالة تطابق عند بداية السلسلة النصية، فإنّ أول عنصر في القائمة الناتجة هو سلسلة نصية فارغة، والأمر ذاته ينطبق على نهاية السلسلة: | |||
<syntaxhighlight lang="python3"> | |||
>>> re.split(r'(\W+)', '...words, words...') | |||
['', '...', 'words', ', ', 'words', '...', ''] | |||
</syntaxhighlight>بهذه الطريقة، يمكن إيجاد مكونات الفاصل دومًا عند نفس الفهارس النسبية ضمن القائمة الناتجة. | |||
== انظر أيضًا == | |||
* التابع <code>[[Python/regex/split|regex.split()]]</code>: يقسم التابع السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المصرّف. | |||
== مصادر == | == مصادر == | ||
* [https://docs.python.org/3/library/re.html#re.split قسم Module Contents في صفحة Regular expressions operations في توثيق بايثون الرسمي.] | * [https://docs.python.org/3/library/re.html#re.split قسم Module Contents في صفحة Regular expressions operations في توثيق بايثون الرسمي.] | ||
[[تصنيف:Python]] | [[تصنيف:Python]] | ||
[[تصنيف:Python Function]] | |||
[[تصنيف:Python Regular Expressions]] | [[تصنيف:Python Regular Expressions]] | ||
[[تصنيف:Python re]] |
المراجعة الحالية بتاريخ 06:44، 18 يونيو 2018
تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى.
البنية العامة
re.split(pattern, string, maxsplit=0, flags=0)
المعاملات
pattern
التعبير النمطي المستخدم لإجراء عملية المطابقة.
string
السلسلة النصية التي ستبحث فيها الدالة عن حالات التطابق.
maxsplit
العدد الأقصى من التقسيمات التي تجريها الدالة على السلسلة النصية. في حال كان العدد الأقصى من التقسيمات أقل من عدد حالات المطابقة فإنّ الدالة تعيد ما يبقى من السلسلة النصية ليكون العنصر الأخير في القائمة المعادة. يأخذ هذا المعامل القيمة الافتراضية 0
.
flags
الرايات المستخدمة لضبط عملية البحث. يأخذ هذا المعامل القيمة 0
كقيمة افتراضية. راجع قسم المعاملات في توثيق الدالة ()re.compile
للمزيد من المعلومات.
القيمة المعادة
تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى. إن استُخدمت أقواس التقاط القيمة ضمن النمط، فإنّ النصّ التابع لجميع المجموعات ضمن النمط سيُعاد كجزء من القائمة الناتجة.
ملاحظات
لا تقسم الدالة split()
في الوقت الحاضر السلسلة النصية عند ظهور حالات تطابق فارغة، فعلى سبيل المثال:
>>> re.split('x*', 'axbc')
['a', 'bc']
صحيح أنّ نتيجة مطابقة التعبير 'x*'
هي العثور على 0
حالة تطابق قبل الحرف 'a'
وبين الحرفين 'b'
و 'c'
وبعد الحرف 'c'
إلا أنّ اللغة تتجاهل حالات التطابق هذه في الوقت الحاضر. يفترض بهذه الدالة أن تقسم السلسلة النصية عند حالات التطابق الفارغة أيضًا وتعيد القائمة ['', 'a', 'b', 'c', '']
، وهذا ما ستتضمّنه الإصدارات المستقبلية من اللغة، ولمّا كان هذا التغيير غير متوافق مع الإصدارات السابقة، فإنّ اللغة تطلق التحذير FutureWarning
في الوقت الحاضر.
لا تقسّم الأنماط التي تطابق سلاسل نصية فارغة السلاسل النصية في الوقت الحاضر، وهذا لا يتّفق مع السلوك المتوقّع من الدالة، لذا فإنّ اللغة تطلق الخطأ ValueError
في الإصدار 3.5 وما بعده:
>>> re.split("^$", "foo\n\nbar\n", flags=re.M)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
ValueError: split() requires a non-empty pattern match.
ملاحظة: أضيف معامل الرايات الاختياري في الإصدار 3.1 من اللغة.
ملاحظة: في الإصدار 3.5 من اللغة يؤدي إجراء عملية التقسيم التي قد تطابق سلسلة نصية فارغة إلى إطلاق تحذير. أما الأنماط التي لا تطابق سوى السلاسل النصية فأصبحت مرفوضة.
أمثلة
يبين المثال التالي طريقة استخدام الدالة والنتائج المعادة منها:
>>> import re
>>> re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split(r'(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
إن كان هناك مجموعات التقاط (capturing groups) ضمن الفاصل وحصلت حالة تطابق عند بداية السلسلة النصية، فإنّ أول عنصر في القائمة الناتجة هو سلسلة نصية فارغة، والأمر ذاته ينطبق على نهاية السلسلة:
>>> re.split(r'(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
بهذه الطريقة، يمكن إيجاد مكونات الفاصل دومًا عند نفس الفهارس النسبية ضمن القائمة الناتجة.
انظر أيضًا
- التابع
regex.split()
: يقسم التابع السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المصرّف.