gpt4 book ai didi

python - 如何在不考虑空格并知道字符串的原始索引的情况下在字符串中查找子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:11 29 4
gpt4 key购买 nike

通常我使用 str.find() 在 python 中查找子字符串。

我现在有一个特例

  1. 首先我想忽略空格例如

    s1= ' first words s t r i n g last words '
    s2= 'string'
    s3= 's tring'
    s4= any other combination with the spaces

    我希望在 s1

    中搜索 s2s3 时 find 返回 true
  2. 其次,我想获取原始字符串中子字符串的开始和结束索引

    可能是原字符串中有很多空格,例如

     s1= ' first words s t r    i n g last words '

    我希望索引在原始字符串中以 s 开始并以 g 结束。

编辑1

澄清空格在源字符串和目标字符串中都无关紧要。

谢谢

最佳答案

您可以通过首先删除要查找的字符串中的空格,然后在每个字符之间放置 ' *'(任意数量的空格)来创建正则表达式模式。由于您希望能够在搜索字符串中使用任何特殊字符,我们还对它们进行了转义:

import re

def find_with_spaces(pattern, text):
pattern = pattern.replace(' ', '')
pattern_re = re.compile(' *'.join(map(re.escape, pattern)))

m = pattern_re.search(text)
if m:
return m.start(), m.end()


s1= ' first words s { r * n g? last words '
s2= 's{r*ng?'

start, end = find_with_spaces(s2, s1)
print(start, end)
print(s1[start:end])

# 13 25
# s { r * n g?

在这种情况下,函数创建和使用的正则表达式模式是 r's *\{ *r *\* *n *g *\?'。请注意,结束索引是 25,而最后一个 '?'位于索引 24 - 这使您可以使用 s1[start:end] 获取匹配的子字符串。

s3= ' * ng?la'
start, end = find_with_spaces(s3, s1)
print(start, end)
print(s1[start:end])

# 19 28
# * n g? la

关于python - 如何在不考虑空格并知道字符串的原始索引的情况下在字符串中查找子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54909287/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com