[python] هل لدى بايثون طريقة سلسلة "تحتوي على" سلسلة فرعية؟


5 Answers

إذا كانت مجرد بحث عن سلسلة فرعية ، يمكنك استخدام string.find("substring") .

عليك أن تكون حذراً قليلاً في find ، index ، وعلى الرغم من أنها عمليات بحث فرعية. بعبارة أخرى ، هذا:

s = "This be a string"
if s.find("is") == -1:
    print "No 'is' here!"
else:
    print "Found 'is' in the string."

ستطبع Found 'is' in the string. وبالمثل ، if "is" in s: سيتم تقييمه إلى True . هذا قد يكون أو لا يكون ما تريده.

Question

أنا أبحث عن string.contains أو string.indexof في بايثون.

اريد ان افعل:

if not somestring.contains("blah"):
   continue



أساسا ، كنت ترغب في العثور على سلسلة فرعية في سلسلة في بيثون. هناك طريقتان للبحث عن سلسلة فرعية في سلسلة في Python.

الطريقة 1: in المشغل

يمكنك استخدام مشغل Python للتحقق من وجود سلسلة فرعية. انها بسيطة جدا وبديهية. سيقوم بإرجاع True إذا تم العثور على السلسلة الفرعية في السلسلة آخر False .

>>> "King" in "King's landing"
True

>>> "Jon Snow" in "King's landing"
False

الطريقة 2: أسلوب str.find()

الطريقة الثانية هي استخدام الأسلوب str.find() . هنا ، نسميه طريقة .find() على السلسلة التي توجد بها السلسلة الفرعية. نجتاز السلسلة الفرعية إلى طريقة find () ونتحقق من قيمة إرجاعها. إذا كانت قيمته غير -1 ، تم العثور على السلسلة الفرعية في السلسلة ، وإلا لا. القيمة التي تم إرجاعها هي فهرس حيث تم العثور على سلسلة فرعية.

>>> some_string = "valar morghulis"

>>> some_string.find("morghulis")
6

>>> some_string.find("dohaeris")
-1

أود أن أوصيكم باستخدام الطريقة الأولى لأنها أكثر بديهية وبديهية.




إذا كنت تبحث عن البحث غير الحساس لحالة الأحرف ككل ، بدلاً من سلسلة فرعية موجودة في كلمة أخرى:

s = 'This is my text example'
if 'is' not in (w.lower() for w in s.split(string.punctuation + string.whitespace)):
     # do something



لا ، لا توجد أي string.contains(str) ، ولكن هناك عامل التشغيل:

if substring in someString:
    print "It's there!!!"

هذا مثال عمل أكثر تعقيدًا:

# Print all files with dot in home directory
import commands
(st, output) = commands.getstatusoutput('ls -a ~')
print [f for f in output.split('\n') if '.' in f ]



لذلك على ما يبدو لا يوجد شيء مماثل للمقارنة ناقلات. طريقة بيثون واضحة للقيام بذلك هي:

names = ['bob', 'john', 'mike']
any(st in 'bob and john' for st in names) 
>> True

any(st in 'mary and jane' for st in names) 
>> False



يوجد في بيثون طريقتان بسيطتان يمكنك تحقيقهما:

الطريقة البايثونية: استخدام كلمة "في" في بيثون

in يأخذ "جهازي" اثنين ، أحدهما على اليسار ( السلسلة الفرعية ) والآخر على اليمين ، ويعرض True إذا كانت الوسيطة اليمنى متضمنة في وسيطة الحقوق ، وإذا لم يكن الأمر كذلك ، فإنها تُرجع False .

example_string = "This is an example string"
substring = "example"
print(substring in example_string)

انتاج:

True

الطريقة غير البيثونية: استخدام str.find في Python:

ترجع طريقة find موضع السلسلة داخل السلسلة أو -1 إذا لم يتم العثور عليها. ولكن ببساطة تحقق ما إذا كان الموقف ليس -1.

if example_string.find(substring) != -1:
    print('Substring found!')
else:
    print('Substring not found!')

انتاج:

Substring found!





Related