How to Check if a String Contains a Substring in Python

Learn how to check if a string contains another string in Python using the `in` operator, `find()`, and `index()` methods.

In today’s digital world, text surrounds us everywhere: on web pages, datasets, and documents. A common task when working with text is searching for specific words or patterns. Imagine that you need to find a specific word or pattern in a large chunk of text on a webpage, in a dataset, or within a report. In such cases, Python’s substring functionality offers easy-to-use tools that make these searches both fast and straightforward.

This article explores Python’s string manipulation features for searching and pattern matching within text data. It covers various methods for substring searches, including the in operator, find(), and index() in this article.

Using the in Operator

In this section, we’ll discuss Python’s in operator and how it makes searching for specific words in a text much easier. The in operator checks for the presence of a substring within a larger string. Depending on whether the substring is present or not, it returns a result in Boolean format: True if the substring is present and False otherwise.

Here is an example of how the in operator is used:

text = "Welcome to Codecademy!"
substring = "to"
if substring in text:
print("Word found!")
else:
print("Word not found!")

In this example, the code checks if the word “to” is present in the string “Welcome to Codecademy!”. Because the substring is present, the code prints “Word Found!”.

Word Found!

This Python string contains a check using the in operator is the most common way to verify if one string exists within another. The in string operator in Python provides a clean and efficient method for string containment verification.

Using the str.index()method

Let’s take a look at another method for finding a substring called str.index(). The str.index() method is a built-in function in Python that allows us to search for a substring within a larger string. If the substring exists, the method returns the index of the first occurrence of the substring. If the substring does not exist, a ValueError is raised.

Let’s take a look at how this method works:

str.index(substring, start=0, end=len(string)) 

Here, substring is the name of the substring to be searched within the main string. The start parameter is the parameter that specifies the position in the string where the search should begin and is optional. The end is an optional parameter that defines where the search should stop. If the end parameter is not provided, then the search continues to the end of the string.

Let’s look at an example of using the str.index() method to find the position of a specific substring within a larger string, returning the index position:

text = "Hello, Welcome to Codecademy!!"
substring = "Welcome"
position = text.index(substring)
print("Substring found at index:", position)

This code will return the index of the first occurrence of the word “Welcome” in the string:

Substring found at index: 7

Using the str.find() method

The str.find() method in Python is another built-in method we can use to locate substrings within a larger string. This method checks the main string and returns the index of the first occurrence of the specified substring. If the substring is not present, it returns -1, enabling effective handling of the substring without causing an error. Whereas the str.index() method raises a ValueError if the substring is not found, making str.find() a safer choice when you want to avoid exceptions.

The syntax for the str.find() method is the following:

str.find(sub[, start[, end]]) 

Here, sub is the name of the substring that needs to be searched within the main string. The parameter start is an optional parameter representing the position in the string where the search should begin, and end is an optional parameter that defines where the search should stop.

Let us look at an example of using the str.find() method to search for a substring inside a longer string and return its position:

# Original string
text = "Hello, Welcome to Codecademy!!"
# Substring to find
substring = "to"
# Using `str.find()`
position = text.find(substring)
if position != -1:
print("Substring found at index:", position)
else:
print("Substring not found in the main string.")

The code will return the index of the first occurrence of the word “Welcome” in the string:

Substring found at index: 15

Here, the substring “to” is first found at the 15th index position.

Understanding the Case-Insensitive Checks

Python’s case sensitivity can make substring searches challenging at times and result in mismatches. It is important to understand how Python handles case-sensitive checks, as this will help clarify the concept further. We will explore this idea in more detail in this section.

Case-insensitive substring searches in Python are essential for guaranteeing accurate and flexible string matching, particularly in situations where the format of the text input can change.

Here’s why this approach is beneficial:

  • Flexibility in User Input: Users may input text in various cases, such as “hi”, “Hi”, or “HI”. Case-insensitive searches guarantee that each of these variations is handled similarly, increasing the search’s accessibility and usability.
  • Error Tolerance: Ignoring capitalization allows systems to recognize words regardless of how they are typed, making searches more efficient. This approach enhances usability and flexibility, especially in search bars and platforms like forums or online shopping websites, where users often input text in various formats.
  • Efficient String Matching: Using case-insensitive methods like .lower() or .upper() simplifies code by eliminating the need for extra logic to handle case variations, making the code cleaner and easier to maintain.
  • Application in Real-World Scenarios: The majority of search engines employ case-insensitive checks to deliver relevant search outcomes, irrespective of the user’s query capitalization.

Use of .lower() and .upper()for Case-Insensitive Checks

In Python, we can use the .lower() or .upper() methods to handle case-insensitive substring searches efficiently. By standardizing string casing, these techniques enable consistent comparisons.

lower() Method

The built-in str.lower() method in Python changes all of a string’s characters to lowercase. The lower() method is especially helpful for case-insensitive string comparisons and searches because it maintains consistency and avoids mismatches resulting from different capitalizations by ensuring all characters are lowercase.

Let’s look at an example of how to use the lower() method for case-insensitive string searching:

# Original string
text = "Hello, Welcome to Codecademy!"
# Substring to search
substring = "welcome"
# Convert both strings to lowercase for comparison
if substring.lower() in text.lower():
print(f"The substring '{substring}' was found!")
else:
print(f"The substring '{substring}' was not found.")

In this example, both the original string (text) and the substring (substring) are converted to lowercase using lower() to eliminate case differences.

This code results in the following output:

The substring 'welcome' was found!

upper() Method

Python’s built-in str.upper() method converts all of a string’s characters to uppercase. When performing case-insensitive string comparisons or searches, this can be quite useful. It guarantees consistency brought on by different capitalization by changing all characters to uppercase.

Let’s see how the upper() method improves effective substring searches with the help of an example:

# Original string
text = "Hello, Welcome to Codecademy!"
# Substring to search
substring = "WELCOME"
# Convert both strings to uppercase for comparison
if substring.upper() in text.upper():
print(f"The substring '{substring}' was found!")
else:
print(f"The substring '{substring}' was not found.")

Here, the case discrepancies are eliminated by using upper() to convert both the original string (text) and the substring (substring) to uppercase.

The code will result in the following output:

The substring 'WELCOME' was found!

Let’s look at each substring search method’s capability, applications, and drawbacks to see how they differ in Python. Let’s have a comparison of the main techniques:

Comparing Methods

Let’s look at each substring search method’s capability, applications, and drawbacks to see how they differ in Python. This is a comparison of the main techniques:

Method Pros Cons Applications
in operator Checks whether a substring exists in a string and returns a boolean value. Does not provide the index position of the substring. Best for quick searches.
str.index() Used for substring searches and raises a ValueError if the substring is not found. Produces an exception and handles missing substrings inadequately. Preferred when an exception should be raised due to missing substrings.
str.find() Finds the first occurrence of a substring and returns its index or -1 if not found. Does not raise an exception but may not be ideal for handling absent substrings elegantly. Preferred when missing substrings should not cause an exception.

Conclusion

In this article We now have a clear understanding of Python substring search techniques, including str.find() , str.index() , and the in operator, along with their practical applications, strengths, and limitations.

For further learning, consider exploring Python programming courses that cover advanced string-handling techniques and best practices. You can explore Codecademy’s course on Python programming.

Author

Codecademy Team

'The Codecademy Team, composed of experienced educators and tech experts, is dedicated to making tech skills accessible to all. We empower learners worldwide with expert-reviewed content that develops and enhances the technical skills needed to advance and succeed in their careers.'

Meet the full team