توفر Python العديد من طرق السلسلة لتحديد والتحقق مما إذا كان نوع السلسلة رقميًا أم أبجديًا.
يتم شرح كل طريقة بنموذج التعليمات البرمجية.
- تحدد ما إذا كانت السلسلة رقمًا عشريًا:
str.isdecimal()
- تحديد ما إذا كانت السلسلة عبارة عن رقم:
str.isdigit()
- تحدد ما إذا كانت السلسلة حرفًا يمثل رقمًا أم لا:
str.isnumeric()
- تحدد ما إذا كانت السلسلة أبجدية:
str.isalpha()
- حدد ما إذا كانت السلسلة أبجدية رقمية:
str.isalnum()
- تحديد ما إذا كانت السلاسل أحرف ASCII أم لا:
str.isascii()
- حكم سلسلة فارغة
- حدد ما إذا كان يمكن تحويل السلاسل إلى أرقام
بالنسبة إلى الطرق الأخرى غير isascii () ، تعتبر السلسلة التي تحتوي على سلسلة فارغة والرموز التالية وما إلى ذلك خاطئة.
,
.
-
-1.23 ، إلخ ، كقيمة عددية موضحة في نهاية هذا القسم.
يمكن استخدام التعبيرات العادية لتحديد أنواع الأحرف بشكل أكثر مرونة ولاستخراج أنواع الأحرف ذات الصلة.
راجع المقالة التالية للحصول على مزيد من المعلومات حول كيفية تحديد ما يلي
- كيفية تحويل سلسلة رقمية (str) إلى رقم (int ، float)
- كيفية تحديد الأحرف الكبيرة والصغيرة
- ذات صلة:تحويل سلسلة من الأرقام إلى قيم رقمية في بايثون
- ذات صلة:قائمة طرق السلسلة لمعالجة الحالة في بايثون
- تحدد ما إذا كانت السلسلة رقمًا عشريًا:str.isdecimal()
- تحديد ما إذا كانت السلسلة عبارة عن رقم:str.isdigit()
- تحدد ما إذا كانت السلسلة حرفًا يمثل رقمًا أم لا:str.isnumeric()
- تحدد ما إذا كانت السلسلة أبجدية:str.isalpha()
- حدد ما إذا كانت السلسلة أبجدية رقمية:str.isalnum()
- تحديد ما إذا كانت السلاسل أحرف ASCII أم لا:str.isascii()
- حكم سلسلة فارغة
- حدد ما إذا كان يمكن تحويل السلاسل إلى أرقام
تحدد ما إذا كانت السلسلة رقمًا عشريًا:str.isdecimal()
في isdecimal () ، يكون هذا صحيحًا إذا كانت جميع الأحرف عبارة عن أرقام عشرية ، أي أحرف في الفئة العامة Nd من Unicode. كما ينطبق أيضًا على الأرقام العربية كاملة العرض ، وما إلى ذلك.
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
إذا كان يحتوي على رمز مثل علامة الطرح أو نقطة ، فهو خطأ. على سبيل المثال ، إذا كنت تريد تحديد أن سلسلة مثل “-1.23” هي قيمة رقمية ، فيمكنك استخدام معالجة الاستثناءات. هذا موضح في نهاية هذا القسم.
s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False
تحديد ما إذا كانت السلسلة عبارة عن رقم:str.isdigit()
في isdigit () ، بالإضافة إلى الأرقام الصحيحة في isdecimal () ، فإن الأرقام التي تكون قيمة خاصية Unicode الخاصة بها Numeric_Type هي Digit أو Decimal صحيحة أيضًا.
على سبيل المثال ، الرقم المرتفع الذي يمثل مربعًا خطأ في isdecimal () ولكنه صحيح في isdigit ().
- رقم مرتفع يمثل المربع
- ²
- \ u00B2}
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True
تحدد ما إذا كانت السلسلة حرفًا يمثل رقمًا أم لا:str.isnumeric()
في isnumeric () ، بالإضافة إلى الأرقام الصحيحة في isdigit () ، فإن الأرقام التي تكون قيمة خاصية Unicode فيها Numeric_Type رقمية صحيحة أيضًا.
الكسور والأرقام الرومانية والأرقام الصينية صحيحة أيضًا.
s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True
تحدد ما إذا كانت السلسلة أبجدية:str.isalpha()
في isalpha () ، تكون خاصية فئة Unicode العامة مع أحد العناصر التالية صحيحة.
Lm
Lt
Lu
Ll
Lo
ستكون الأبجدية والأحرف الصينية وما إلى ذلك صحيحة.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
الأرقام العربية خاطئة ، لكن الأرقام الصينية صحيحة لأنها أحرف صينية أيضًا ؛ ومع ذلك ، فإن الأصفار في الأرقام الصينية خاطئة.
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True
s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True
s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False
الأرقام الرومانية خاطئة.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
حدد ما إذا كانت السلسلة أبجدية رقمية:str.isalnum()
في isalnum () ، يكون صحيحًا إذا كان كل حرف صحيحًا في أي من الطرق التالية المدرجة حتى الآن.
isdecimal()
isdigit()
isnumeric()
isalpha()
يتم تقييم كل حرف على حدة ، لذا فإن السلسلة التي تحتوي على أحرف وأرقام ستكون صحيحة في isalnum () حتى لو كانت خاطئة في جميع الطرق الأخرى.
s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
تحديد ما إذا كانت السلاسل أحرف ASCII أم لا:str.isascii()
أضاف Python 3.7 isascii (). ترجع صحيحًا إذا كانت جميع الأحرف في السلسلة أحرف ASCII.
بالإضافة إلى الأرقام والحروف ، فإن الرموز مثل + و – صحيحة أيضًا.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
هيراغانا غير ASCII والشخصيات الأخرى خاطئة.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
كما سنرى بعد ذلك ، على عكس الطرق الأخرى ، فإن isascii () ترجع صحيحًا حتى بالنسبة للسلسلة الفارغة.
حكم سلسلة فارغة
السلسلة الفارغة هي true لـ isascii () و false بالنسبة للطرق الأخرى.
s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s =
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
استخدم bool () لتحديد ما إذا كانت سلسلة فارغة. القيمة المعادة خاطئة لسلسلة فارغة وصحيحة خلاف ذلك.
print(bool(''))
# False
print(bool('abc123'))
# True
حدد ما إذا كان يمكن تحويل السلاسل إلى أرقام
تحتوي سلاسل القيمة السالبة أو الجزئية على فترات أو علامات ناقص. لذلك ، تكون النتيجة خاطئة لجميع العمليات باستثناء isascii ().
على الرغم من أن هذا صحيح بالنسبة لـ isascii () ، إلا أنه غير مناسب لتحديد ما إذا كان يمكن تحويل سلسلة إلى قيمة رقمية ، نظرًا لأنها صحيحة حتى لو كانت تحتوي على رموز أو أحرف أبجدية أخرى.
s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
يمكن تحويل السلاسل إلى أرقام فاصلة عائمة باستخدام عدد عشري (). خطأ في السلاسل التي لا يمكن تحويلها.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
مع معالجة الاستثناء ، يمكن تعريف دالة ترجع صحيحًا عندما يمكن تحويل سلسلة باستخدام float ().
def is_num(s):
try:
float(s)
except ValueError:
return False
else:
return True
print(is_num('123'))
# True
print(is_num('-1.23'))
# True
print(is_num('+1.23e10'))
# True
print(is_num('abc'))
# False
print(is_num('10,000,000'))
# False
إذا كنت تريد تحديد أن الرقم المفصول بفاصلة صحيح أيضًا ، فاستخدم استبدال () لإزالة الفاصلة (استبدلها بسلسلة فارغة).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
إذا كنت تريد دعم ترسيم المسافات ، يمكنك استخدام الاستبدال () بشكل أكبر.
def is_num_delimiter2(s):
try:
float(s.replace(',', '').replace(' ', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter2('10,000,000'))
# True
print(is_num_delimiter2('10 000 000'))
# True