当前位置: 首页 > 知识库问答 >
问题:

在python中按一定顺序查找子字符串

微生毅然
2023-03-14

我有一长串字符串,它们按给出的顺序包含感兴趣的子字符串,但这里有一个在文本文件中使用句子的小示例:

This is a long drawn out sentence needed to emphasize a topic I am trying to learn.
It is new idea for me and I need your help with it please!
Thank you so much in advance, I really appreciate it.

从这个文本文件中,我想找到任何同时包含“I”和“need”的句子,但它们必须按该顺序出现。

所以在这个例子中,'I''需要'都出现在句子1和句子2中,但是在句子1中它们的顺序不对,所以我不想返回。我只想返回第二句,因为它的顺序是'我需要'

我用这个例子来识别子字符串,但是我不知道如何按顺序找到它们:

id1 = "I"
id2 = "need"

with open('fun.txt') as f:
    for line in f:
        if id1 and id2 in line:
            print(line[:-1])

这将返回:

This is a long drawn out sentence needed to emphasize a topic I am trying to learn.
It is new idea for me and I need your help with it please!

但我只想要:

It is new idea for me and I need your help with it please!

谢谢你!

共有3个答案

游乐池
2023-03-14

就这样吧

  import re
  match = re.match('pattern','yourString' )

https://developers.google.com/edu/python/regular-expressions

所以你正在寻找的模式是'I(.*)需要' 正则表达式 匹配两个字符串之间的所有字符 您可能必须以不同的方式构建模式,因为我不知道是否有例外。如果是这样,您可以运行正则表达式两次以获取原始字符串的子集,然后再次运行以获得所需的完全匹配项

房光临
2023-03-14

您可以使用正则表达式来检查这一点。一种可能的解决方案是这样的:

id1 = "I"
id2 = "need"
regex = re.compile(r'^.*{}.*{}.*$'.format(id1, id2))

with open('fun.txt') as f:
    for line in f:
        if re.search(regex, line):
            print(line[:-1])
曹建明
2023-03-14

您需要在 id1 之后的行部分中标识 id2

infile = [
    "This is a long drawn out sentence needed to emphasize a topic I am trying to learn.",
    "It is new idea for me and I need your help with it please!",
    "Thank you so much in advance, I really appreciate it.",
]

id1 = "I"
id2 = "need"

for line in infile:
    if id1 in line:
        pos1 = line.index(id1)
        if id2 in line[pos1+len(id1) :] :
            print(line)

输出:

It is new idea for me and I need your help with it please!
 类似资料:
  • 问题内容: 我有在另一个主题上找到的这段代码,但是该代码按连续字符而不是字母顺序对子字符串进行排序。如何按字母顺序更正?它打印出来了,我想打印。谢谢 ps:我是python的初学者 问题答案: 尝试更改此: 对此: 这将显示您的示例输入字符串。代码更简单,因为您正试图解决一个更简单的问题:-)

  • 问题内容: 我试图弄清楚如何将字符串中的字符与字符串中的下一个字符进行比较。例如,如果我有一个字符串: 我希望能够将第一个字符与第二个字符进行比较,如果第二个字符大于或等于第一个字符(按字母顺序,a e,y = y等),我想将1加到另一个变量(基本上是一个计数器)。如果不是,我想将计数器重置为0。基本上重复整个过程以获取字符串的长度。如果计数器变得大于maxlen变量,则将一个加到maxlen(或

  • 问题内容: 背景: 示例列表: 我想检索一个子串是否匹配的元素,例如 码: 如果列表中的任何元素包含模式,则上面的命令会打印出来。 我想打印与子字符串匹配的元素。因此,如果我要检查,我只想从列表中打印。 问题答案: print [s for s in list if sub in s] 如果要用换行符分隔它们: 完整示例,不区分大小写:

  • 问题内容: 我有2列的大型表格:Id和Title。ID为bigint,我可以自由选择“标题”列的类型:varchar,char,text等。列标题包含随机文本字符串,例如“ abcdefg”,“ q”,“ allyourbasebelongtous”,最多255个字符。 我的任务是通过给定的子字符串获取字符串。子字符串也具有随机长度,可以是字符串的开头,中间或结尾。最明显的执行方式: 我不在乎IN

  • 实际上我想这样写一个给定集合的所有子集: 例如,如果我的集合是,我希望有 这就是我尝试的: 这是输出我的问题是。我不希望在每个子集的末尾和整个输出的末尾都有。你能帮我解决这个问题,让我的输出像<code>{}、{1}、}2}、{1,2}</code>?最后,我想把它们分类

  • 问题内容: 我在Lucene 5.0中对字符串字段进行排序时遇到问题。显然,自Lucene 4更改以来,您可以进行排序的方式。下面显示了正在为我的文档建立索引的某些字段的摘要。 我想首先对相关性进行排序,这很好。我的问题是标题字段上的排序不起作用。我创建了一个排序域,在一系列方法调用之后,我试图将其与TopFieldCollector一起使用。 转到: 最后是应用排序字段的方法: 使用返回的收集器