微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模式匹配Python

如何解决模式匹配Python

| 我目前一直在尝试制作一个天真的算法,该算法给出了一种模式,例如aabba 在文本中搜索它,例如abbbbaababaabbaaabbaa一次输入一个字母。如果正确,它将比较a和文本,然后比较下一个字母,如果那是错的,则整个模式将移动一个并比较a与b等 我们给出了代码示例
print \"Input text: \",text = raw_input()
print \"Input pattern: \",pattern = raw_input()

index = text.find(pattern)
while index > -1:
    print index
    index = text.find(pattern,index+1)
但是python中的find()函数太快了(我需要一种非优化的算法,使用while 和for循环语句,我猜)。 任何帮助表示赞赏, 谢谢     

解决方法

        我想这就是您所需要的,下面的代码对每个字符进行比较。您还可以通过对
text
的迭代替换对
find
的调用,其中包括检查
text
的第一个字符是否与
pattern
的第一个字符匹配:
def my_find(text,pattern):
    \'\'\'Find the start index of a pattern string in a text.
    Return -1 if not found,and assume that pattern is not empty\'\'\'

    found = False
    current_start_index = text.find(pattern[0])
    index_text = current_start_index
    index_pattern = 0

    while not found and index_text + len(pattern) - 1 < len(text) and \\
            current_start_index != -1:

        index_text += 1
        index_pattern += 1

        while index_text < len(text) and \\
                index_pattern < len(pattern) and \\
                text[index_text] == pattern[index_pattern]:

            if index_pattern == len(pattern) - 1:
                found = True
                break
            else:
                index_text += 1
                index_pattern += 1

        if not found:
            current_start_index = text.find(pattern[0],current_start_index + 1)
            index_text = current_start_index

    if found:
        return current_start_index
    else:
        -1
    ,        
def my_find(haystack,needle):
    n_len = len(needle)
    start = 0
    while start <= (len(haystack)-n_len+1):
        if haystack[start:start+n_len-1] == needle:
            return True
        start += 1
据我所知,这是您的算法。未经测试,将进行测试并通知您是否可行。 经过测试,似乎可以正常工作。     ,        听起来您正在学习正则表达式,这是一个片段,可以帮助您入门。
myFileName = \"abbababaaa\"
patternToMatch = \"ababa\"

i = 0
j = 0
while (i < len(myFileName)):
    if (patternToMatch[i:i] == myFileName[j:j]):
        i++
        j++
    else:
        i = 0        

if len(patternToMatch) == i:
    # matched a pattern
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。