首页 > 编程问答 >如何在Python中查找字符串中所有出现的子字符串,同时忽略某些字符?

如何在Python中查找字符串中所有出现的子字符串,同时忽略某些字符?

时间:2024-07-26 07:12:38浏览次数:6  
标签:python string

我想找到所有出现的子字符串,同时忽略某些字符。我怎样才能在Python中做到这一点?

示例:

long_string = 'this is a t`es"t. Does the test work?'
small_string = "test"
chars_to_ignore = ['"', '`']
print(find_occurrences(long_string, small_string))

应该返回 [(10, 16), (27, 31)] 因为我们想忽略字符 ` 的存在,并且 ".

  • (10, 16) 是开始t`es"t in long_string 的结束索引,
  • (27, 31) test in long_string 的开始和结束索引。

import re

def find_occurrences(long_string, small_string, chars_to_ignore):
  """查找字符串中所有出现的子字符串,同时忽略某些字符。

  Args:
    long_string: 要搜索的字符串。
    small_string: 要查找的子字符串。
    chars_to_ignore: 要忽略的字符列表。

  Returns:
    字符串中所有出现的子字符串的开始和结束索引列表,忽略指定的字符。
  """
  # 创建一个正则表达式模式,匹配 small_string,忽略 chars_to_ignore 中的字符
  pattern = f"[{''.join(chars_to_ignore)}]*".join(re.escape(char) for char in small_string)

  occurrences = []
  for match in re.finditer(pattern, long_string):
    occurrences.append((match.start(), match.end()))
  return occurrences

long_string = 'this is a t`es"t. Does the test work?'
small_string = "test"
chars_to_ignore = ['"', '`']
print(find_occurrences(long_string, small_string, chars_to_ignore))

本代码的功能如下:

  1. 使用正则表达式: 它使用 re 模块来处理正则表达式,从而实现灵活的模式匹配。
  2. 动态生成模式: 代码根据要忽略的字符和目标子字符串动态生成正则表达式模式。
  3. 查找所有匹配项: re.finditer 函数用于查找所有匹配的子字符串,并返回它们的开始和结束索引。
  4. 返回索引列表: 代码将所有匹配的子字符串的索引存储在一个列表中,并返回该列表。

此代码将打印以下内容:

[(10, 16), (27, 31)]

这正是想要的结果。此代码首先创建一个正则表达式模式,该模式匹配 small_string 中的所有字符,同时忽略 chars_to_ignore 中的任何字符。然后,它使用此模式在 long_string 中查找所有匹配项,并返回它们的索引。

标签:python,string
From: 78795712

相关文章

  • 如何让 python 为我提供正确的函数解决方案并根据符号更改零的格式?
    我正在尝试制作一个二次公式计算器。一切看起来都很好,但是,当我输入一些函数(例如x^2-2x+1和x^2+2x+1)时,当它们有不同的解决方案时,它会给我相同的零。我遇到的另一个问题是,在代码的末尾,format_solution(root),我希望它能够根据符号改变格式。例如,如果零是(x-1),我不希望它输入(......
  • PYTHON 代码执行错误 - 冻结 importlib._bootstrap>(1165)_find_and_load()?
    在MACOS10.15(CATALINA)上执行此PYTHON代码时出现以下错误。我正在使用IDLEShell编写PYTHON3.11。Python3.11.4(v3.11.4:d2340ef257,Jun 62023,19:15:51)[Clang13.0.0(clang-1300.0.29.30)]ondarwinType"help","copyright","credits"o......
  • 如何修复我的 python flet 音频可视化工具在终端中不出现错误的情况下无法工作
    标题:音频播放,但频谱可视化未在FletAudioVisualizer中显示我正在使用Flet框架开发音频可视化器。声音播放正确,但频谱可视化未显示。这是我的代码:importfletasftimportnumpyasnpfrompydubimportAudioSegmentfrompydub.utilsimportmake_chunksimportm......
  • 使用隐式 __init__ 方法向 python 数据类添加显式 dunder 方法
    我在python中创建了一个数据类,选择使用隐式定义的__init__方法。然后,我尝试显式重写比较dunder方法之一(__eq__)。因为没有明确的__init__方法,所以'this'参数不存在,所以python抛出了一个NameError。为了做到这一点,即使自动生成的很好,我是否也必......
  • 84 我正在使用 Python 开发 selenium 自动化项目。我收到错误 .NoSuchElementExceptio
    场景是这样的,我将打开一个网页,在使用selenium单击该网页后,它会要求位置访问权限,屏幕上会出现一堆按钮,我正在尝试定位其中一个按钮,但即使正确给出了Xpath地址,我得到.NoSuchElementException:错误能够单击目标按钮你正在使用Selenium在Python中开发自动化项目,并遇到......
  • 在Python 3中删除两个指定字符串之间的字符串
    我正在从事一个NLP项目,该项目要求我从一段文本中删除计算机代码。代码包含在标签<pre><code>和</code></pre>之间。现在我可以做一个简单的正则表达式匹配,但我想概括这个函数,以便它可以删除任何两个指定字符串之间的文本,即使它们是嵌套的。例如,如果我有一个......
  • Azure Open AI - Python 和 Java API 之间 gpt4o 的结果截然不同
    我使用Java和PythonAPI对AzureOpenAI进行相同的调用,但收到截然不同的结果:相同的系统提示相同的用户提示适用于Java和Python的azureai包的相同(最新)版本尽管输入的用户和系统提示完全相同,但响应却非常不同-python提示是“正确的”并......
  • leetcode 输出错误? (Python)
    我的VSCode/本地终端给出了[1,4,1,5,1,6]的正确输出,但不知何故leetcode给了我完全不同的输出。我在这里错过了什么吗?这怎么可能?顺便说一下,这是wigglesort2将我的本地代码复制粘贴到leetcode中给出了不同的输出数组很难在没有看到你的代码的情况下......
  • 当 python 窗口的一部分不在屏幕上时,如何让它自己被记录?
    在Windows10中,大多数应用程序窗口都可以使用OBS等程序进行记录。当窗口被拖动以致其部分内容在显示屏上不可见时,通常OBS仍会接收窗口的内容,即使它在屏幕上不可见。但是,在编写python应用程序时,这似乎不以相同的方式工作。我尝试了几种不同的类似GUI的模块......
  • 使用 aws cdk 设置用户池客户端属性以具有读/写访问权限 - Python
    我试图根据属性给予一些自定义属性特定的读/写访问权限。我收到此错误。资源处理程序返回消息:“无效写入创建客户端时指定的属性(服务:CognitoIdentityProvider,状态代码:400,请求ID:<request_id>)”(RequestToken:<request_token>,HandlerErrorCode:InvalidRequest)任何人都可以为......