您的位置:

str.contains: 在Python中查找子字符串

一、str.contains是什么

str.contains是Python中一个字符串处理的方法,它可以在一个字符串中查找一个子字符串,如果该子字符串存在于原字符串中,则返回True,否则返回False。

使用方法:
Syntax: Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)
参数:
pat: 要查找的字符串
case: 是否区分大小写,默认为True(即区分大小写)
flags: 正则表达式的标记
na: 缺失值(NaN)的表示形式
regex: 是否使用正则表达式,默认为True(即使用正则表达式)

二、str.contains的用途

str.contains可以在文本处理中非常有用。下面简单介绍其主要用途。

1. 查找字符串

str.contains可以用来查找特定字符串是否存在于另一个字符串中。例如:

import pandas as pd

# 创建一个Series
s = pd.Series(['apple', 'pear', 'orange', 'banana'])
# 查找是否包含apple
s.str.contains('apple')

输出结果:
0 True
1 False
2 False
3 False
dtype: bool

可以看到,该Series中的第一个元素包含了字符串“apple”,因此输出结果为True。

2. 替换字符串

str.contains还可以用来替换字符串。例如,我们可以使用它来将一个字符串中的所有“-”替换为“_”:

import pandas as pd

# 创建一个Series
s = pd.Series(['apple-2019', 'pear-2020', 'orange-2021', 'banana-2022'])
# 将所有'-'替换为'_'
s.str.replace('-', '_')

输出结果:
0 apple_2019
1 pear_2020
2 orange_2021
3 banana_2022
dtype: object

3. 构造新的Series

str.contains还可以用于构造新的Series。例如,我们可以使用它来构造一个表示每个字符串中是否包含“at”的Series:

import pandas as pd

# 创建一个Series
s = pd.Series(['cat', 'dog', 'rat', 'bat'])
# 构造一个新的Series,表示每个字符串是否包含'at'
has_at = s.str.contains('at')
print(has_at)

输出结果:
0 True
1 False
2 True
3 True
dtype: bool

三、str.contains的应用案例

1. 分析电子邮件列表

假设我们有一个电子邮件列表,其中包含每封电子邮件的主题、发件人和收件人。我们想要找出所有与“Python”相关的邮件。我们可以使用str.contains方法来查找包含字符串“Python”的主题或正文的电子邮件。具体方法如下:

import pandas as pd

# 创建一个DataFrame
df = pd.DataFrame({
    'subject': ['Python request', 'Java request', 'Python error', 'Python success'],
    'sender': ['Tom', 'Alex', 'Tom', 'Tom'],
    'recipient': ['John', 'Tom', 'John', 'John']
})
# 提取主题、发件人和收件人包含'Python'的邮件
python_emails = df[df['subject'].str.contains('Python') | 
                    df['sender'].str.contains('Python') | 
                    df['recipient'].str.contains('Python')]
print(python_emails)

输出结果:
subject sender recipient
0 Python request Tom John
2 Python error Tom John
3 Python success Tom John

通过str.contains,我们成功找到了所有与“Python”相关的邮件。

2. 解析网页内容

假设我们要从一个网页中抽取所有的URL链接。我们可以先使用Python中的requests模块从网页中获取HTML代码,然后使用str.contains方法筛选出所有的URL链接。具体方法如下:

import requests
import pandas as pd
import re

# 获取网页HTML代码
url = 'https://www.baidu.com'
response = requests.get(url)
html = response.text

# 使用正则表达式匹配所有的URL链接
pattern = r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'
urls = pd.Series(re.findall(pattern, html))
# 筛选出所有以'http'或'https'开头的URL链接
http_urls = urls[urls.str.contains('^https?')]
print(http_urls)

输出结果:
0 https://www.baidu.com/more/
1 https://www.baidu.com/cache/sethelp/help.html
2 https://www.baidu.com/more/suggestion.html
3 https://voice.baidu.com/act/newpneumonia
4 https://www.baidu.com/duty/
5 https://github.com/WhiteTrefoil/python_note
dtype: object

通过str.contains,我们成功找到了所有以'http'或'https'开头的URL链接。

总结

通过本文,我们了解了str.contains的用法和作用。str.contains是Python中一个方便实用的字符串处理工具,可以在文本处理中帮助我们快速地查找、替换和提取字符串。