为了账号安全,请及时绑定邮箱和手机立即绑定

如何在输入字符串中查找模式

如何在输入字符串中查找模式

绝地无双 2021-10-10 13:42:24
我需要在文本文件中找到给定的模式并打印匹配的模式。文本文件是一串数字,模式可以是任何数字串或由“X”表示的占位符。我想解决这个问题的方法是将序列加载到一个变量中,然后创建一个可测试的子序列列表,然后测试每个子序列。这是我在 python 中的第一个函数,所以我对如何轻松创建测试序列列表然后对其进行测试感到困惑。def find(pattern):  #finds a pattern in the given input file    with open('sequence.txt', 'r') as myfile:        string = myfile.read()    print('Test data is:', string)    testableStrings = []    #how to create a list of testable sequences?    for x in testableStrings:        if x == pattern:            print(x)    return例如,在“11012102”中搜索“X10X”应打印“1101”和“2102”。
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

让pattern = "X10X", string = "11012102", n = len(pattern)- 仅用于以下说明:


如果不使用正则表达式,您的算法可能如下所示:


构造一个长度为 的字符串的所有子序列的列表n:


In[2]: parts = [string[i:i+n] for i in range(len(string) - n + 1)]

In[3]: parts

Out[3]: ['1101', '1012', '0121', '1210', '2102']

将模式与中的每个元素进行比较parts:


for part in parts:

的比较pattern用part(两者都具有现在相等的长度)将与在对应位置处的符号的符号:


    for ch1, ch2 in zip(pattern, part):

如果ch1是X符号 or ch1 == ch2,则对应符号的比较将继续,否则我们将打破它:


        if ch1 == "X" or ch1 == ch2:

            continue

        else:

            break

最后,如果有符号比较所有的符号是成功的,即所有对相应的符号被耗尽,在else该分支for语句会被执行(是的,for报表可能有一个else用于这种情况下,分支)。


现在您可以使用匹配的 执行任何操作part,例如打印它或将其附加到某个列表:


    else:

       print(part)

所以都集中在一个地方:


pattern = "X10X"

string = "11012102"

n = len(pattern)


parts = [string[i:i+n] for i in range(len(string) - n + 1)]


for part in parts:

    for ch1, ch2 in zip(pattern, part):

        if ch1 == "X" or ch1 == ch2:

            continue

        else:

            break

    else:

        print(part)

输出:


1101

2102


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号