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

Python Re 如何处理作为模式传递的子字符串多个单词?

如何解决Python Re 如何处理作为模式传递的子字符串多个单词?

我正在构建一个带有搜索源的简单字符串匹配算法。该算法使用 re.finditer,并且在提供像“crow”这样的单个字符串作为模式时它工作正常,但是,当我尝试搜索一个短语时,我得到与模式不匹配的奇怪结果,比如“你什么都不知道,jon sNow”,它要么没有找到它,要么找到了其他完全不相关的东西。这让我相信将直字符串作为模式传递存在问题,可能与空格有关。

代码

def naiveMatch(pattern,text):
    print(pattern)
    i=0
    for match in re.finditer(pattern,text):
        print(match.start())
        i=i+1
    print("I: ",i)

作为本次测试的基础,我使用了 GOT 对话。 “crow”这个词在 S3E2 中匹配了 18 次。字符串“You kNow nothing,Jon SNow”在第 2 集中也匹配,即使它不应该在那里。它匹配的位置是: 'r?这孩子?提利昂:我 在第 7 集中,字符串应该匹配,但不是。

这让我相信在不处理的情况下提供此字符串并将其提供给正则表达式存在一些问题。

解决方法

更新,这个问题实际上是由 os.listdir() 中的文件顺序错误引起的,将文件 10 放在文件 1 和 2 之间。

['e1.txt','e10.txt','e2.txt','e3.txt','e4.txt','e5.txt','e6.txt','e7.txt ','e8.txt','e9.txt']

问题已通过使用带有 lambda 的 sorted() 函数根据文件名中的数字进行排序来解决。

key=lambda a: int(re.search("[0-9][0-9]?[0-9]?",a,flags=0).group(0)))

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