【问题标题】:How can I find this pattern in a text document?如何在文本文档中找到这种模式?
【发布时间】:2019-05-14 00:25:18
【问题描述】:

所以我在 python 中练习了一些 RegEx,本质上我想查看交易号日志,看看它们中是否有任何返回错误,例如电话激活错误。

我成功地在字典中搜索了以 Error 开头然后以 Activation 结尾的内容,因此如果是平板电脑、手表等,它仍然会找到错误。但是,作为批量文本文件,它不会成功找到模式。

所以我用来在字典中找到它的代码是这样的,字典键是事务号,错误(或缺少)是值:

    for i in Transaction_Log:
        if bool(re.search("^Error.* Activation$", Transaction_Log[i])):  
            print("Found requested error in transaction number " + i)
            error_count += 1

这可行,但是在这样的文本文件设置中使用相同的搜索功能无法找到任何内容:

    Transnum: 20190510001 error: Error in phone Activation,
    Transnum: 20190510002 error: none,
    Transnum: 20190510003 error: Error in tablet Activation,

理想情况下,它可以找到错误的类型,成功后我可以做一个计数器来查看有多少,但是当通过文本文件搜索时,我的布尔语句不是 True。

不过,只搜索 Error 这个词确实有效。

【问题讨论】:

  • ^$ 是输入字符串开头和结尾的锚点,因此如果输入以 Transnum 开头,那么 ^ 将阻止匹配。
  • @CAustin,明白了。我认为这只是为了匹配而不是搜索。嗯。关于如何在行中的任何位置找到以 Error 开头并以 Activation 结尾的字符串的任何想法?
  • 当然,如果您要查找的子字符串始终以Error 开头,并且如果输入中的前面没有Error 的实例,您可以简单地删除^ 并将其删除应该工作。
  • @CAustin 嗯。似乎仍然没有用,但你所说的关于锚的说法是有道理的。我会玩弄那个
  • 哦,我刚刚注意到每一行都以逗号结尾,所以这也会弄乱最后的 $ 锚。

标签: python regex pattern-matching


【解决方案1】:

在@CAustin 的帮助下,我发现我正在搜索错误的模式,因为该行没有以错误开头,并且该行的结尾也有一个逗号。通过删除两个锚点,我能够在这个示例中找到我需要找到的东西,所以对于其他寻找类似东西的人来说,这就是......

    for line in testingDoc:
        if bool(re.search("Error.* Activation", line)):
            print("found error in transaction")

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2012-07-08
    • 1970-01-01
    • 2017-07-24
    • 2012-03-06
    • 2014-02-04
    • 1970-01-01
    • 2018-03-15
    • 2022-10-17
    相关资源
    最近更新 更多