Python 通配符子串搜索

在使用 Python 处理字符串时,我们有时会遇到需要搜索子串的情况,但问题在于子串中可能包含一些缺失或未知的字符。我们需要在主字符串中找到能够匹配这种模式的子串。这项任务在许多领域都有广泛的应用。让我们来探讨几种可以完成此任务的方法。

方法 #1:使用 re.search()

这是执行此任务的方法之一。在这种方法中,我们利用正则表达式编译带有通配符的子串模式,并在主字符串中使用 search() 方法进行查找。

Python3

# Python3 代码演示通配符子串搜索的工作原理
# 使用 re.search() 
import re 
    
# 初始化字符串 
test_str = ‘geeksforgeeks is best for geeks‘

# 打印原始字符串 
print("原始字符串是:" + str(test_str)) 

# 初始化子串 
sub_str = ‘..st‘

# 使用 re.search() 
temp = re.compile(sub_str) 
res = temp.search(test_str) 

# 打印结果 
print("子串匹配结果为:" + str(res.group(0)))

输出:

原始字符串是:geeksforgeeks is best for geeks                                                                
子串匹配结果为:best

方法 #2:使用 re.finditer()

这是解决此问题的另一种方法。使用这种方法,如果需要,我们还可以提取匹配项的位置信息。

Python3

# Python3 代码演示通配符子串搜索的工作原理
# 使用 re.finditer() 
import re 
    
# 初始化字符串 
test_str = ‘geeksforgeeks is best for geeks‘

# 打印原始字符串 
print("原始字符串是:" + str(test_str)) 

# 初始化子串 
sub_str = ‘..st‘

# 使用 re.finditer() 
temp = re.compile(sub_str) 
res = temp.search(test_str) 

# 打印结果 
print("子串匹配结果为:" + str(res.group(0)))

输出:

原始字符串是:geeksforgeeks is best for geeks                                                                
子串匹配结果为:best

所有方法的时间和空间复杂度都是相同的:

时间复杂度: O(n)
空间复杂度: O(n)
方法 #3:

这是另一种使用 INLINECODEc5eec558 库和 INLINECODEc6cb9c82 方法的方法。它与 INLINECODE821a48e1 方法类似,但 INLINECODE26bfcb8c 会返回一个包含所有非重叠匹配项的列表,作为单独的字符串。

Python3

import re

# 初始化字符串
test_str = ‘geeksforgeeks is best for geeks‘

# 打印原始字符串
print("原始字符串是:" + str(test_str))

# 初始化子串
sub_str = ‘..st‘

# 使用 re.findall() 进行通配符子串搜索
temp = re.compile(sub_str)
res = temp.findall(test_str)

# 打印结果
print("子串匹配结果为:" + str(res))
# 代码贡献者:Edula Vinay Kumar Reddy

输出

原始字符串是:geeksforgeeks is best for geeks
子串匹配结果为:[‘best‘]

这种方法的时间和空间复杂度与前几种方法相同:

时间复杂度:O(n)

辅助空间:O(n)

方法 #4:使用 split(), replace(), endswith(), join() 方法
思路

  • 使用 split() 分割给定的字符串。
  • 将 substr 中的 INLINECODE6154686d 替换为空字符串(使用 replace())。
  • 启动一个 for 循环来遍历列表。
  • 检查元素的长度是否等于初始子串的长度,以及元素是否以替换后的子串结尾(使用 endswith())。
  • 如果为真,则将这些元素追加到输出列表中。
  • 最后拼接输出并显示(使用 join())。

Python3

# Python3 代码演示通配符子串搜索的工作原理

# 初始化字符串
test_str = ‘geeksforgeeks is best for geeks‘

# 打印原始字符串
print("原始字符串是:" + str(test_str))

# 初始化子串
sub_str = ‘..st‘

x = test_str.split()
res = []
y = len(sub_str)
sub_str = sub_str.replace(".", "")
for i in x:
    if len(i) == y and i.endswith(sub_str):
        res.append(i)

# 打印结果
print("子串匹配结果为:" + "".join(res))

输出

原始字符串是:geeksforgeeks is best for geeks
子串匹配结果为:best

时间复杂度:O(n)
辅助空间:O(n)
方法 #5:使用字符串切片和列表推导式

  • 初始化字符串和要搜索的模式。
  • 打印原始字符串。
  • 使用列表推导式创建包含所有匹配模式的子串的列表。

  a. 对于原始字符串中每个可能的起始索引 i,提取长度等于模式长度的子串。

  b. 检查子串中的每个字符是否与模式中对应的字符匹配,或者模式字符是否为通配符 "."。

  c. 如果所有字符都匹配或是通配符,则将该子串添加到匹配列表中。

  • 如果至少有一个匹配项,打印第一个匹配项。

Python3

test_str = ‘geeksforgeeks is best for ge
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/26295.html
点赞
0.00 平均评分 (0% 分数) - 0