首页 > 解决方案 > 比较某个字符串和字符串列表的某个出现

问题描述

我有一个字符串"spaghet in insert in impossible(banana)"(示例字符串。),我将调用它testString。我还有一个字符串中每个“单词”的列表,使用以下代码生成:

stringList = re.split("(\W)", testString)
for item in stringList:
    if item == "":
        stringList.remove(item)

该列表如下所示: ["spaghet", "in", "insert", "in", "impossible", "(", "banana", ")"]
我需要一个函数,它可以为我的字符串BY ITSELF 中每次出现的单词“in”提供开始和结束位置。本质上,它将匹配“spaghet”之后的“in”和“insert”之后的“in ”,但不匹配“insert”中的“ in ”。
在我当前的示例中,它将返回((9, 10), (19, 20)). 当然,“in”在这里只是一个占位符,因为它会在我的代码中被替换为一个有意义的字符串。任何帮助将不胜感激。
谢谢,蓝

标签: pythonre

解决方案


一个班轮-

>>> import re
>>> [(m.start(0) + 1, m.end(0)) for m in re.finditer(r'\bin\b', 'spaghet in insert in impossible(banana)')]
[(9, 10), (19, 20)]

解释

我们将使用正则表达式\bin\b来匹配in单词,您可以根据自己的喜好随意更改。

re.finditer返回匹配对象的可迭代对象,匹配对象具有方便的start方法end来提取每个匹配项的开始和结束索引(0 索引)。

您要求开始索引为 1 索引,因此m.start(0) + 10 是完全匹配(没有捕获的组)


推荐阅读