【问题标题】:Python 2.7 - re.search in txt file not working correctlyPython 2.7 - txt 文件中的 re.search 无法正常工作
【发布时间】:2017-02-07 14:25:10
【问题描述】:

我在让 re.search 使用 txt 文件时遇到了一些麻烦。在我的 .txt 文件中,我有一小段代码会将一个字符串写入名为“Python 2.7 - 通过 PyCharm 编写”的文件,该文件可以正常工作。然后我想使用正则表达式来验证文件中是否存在“Written”一词。

这是我的代码:

FileOpen = open("default.txt", "r")
FileRead = FileOpen.read()
return_value = re.search(r"\bWritten\b", FileRead)
print return_value

在 return_value 打印之后,它没有找到所需的单词并在执行时输出搜索失败:

None

如果我在分配给变量的简单字符串上尝试相同的代码,则使用 re.search i:e: 成功找到匹配项:

string1 = "The fox jumped over the fence"
re.search(r"\bjumped over\b", string1)

执行时会产生这个输出::

sre.SRE_Match object...

但是,一旦我通过读取 .txt 文件中的内容开始尝试此 re.search(),它似乎总是以“无”失败。如果有人能告诉我哪里出错了,那将不胜感激。谢谢。

【问题讨论】:

  • print repr(FileRead) 显示什么? (另外,按照惯例,以大写字母开头的名称是类。变量使用snake_case。)
  • 您好,感谢您的提示,我还制作了一个新模块并尝试了相同的代码并且它有效。问题是,在这段代码的正上方,我直接在上面调用了另一个 file.read。一旦删除它,然后使用我的问题中显示的代码找到匹配项。我猜它试图打开并读取已经打开以供读取的文件,从而导致问题。如果我的理论是正确的,为什么这会导致正则表达式失败,那么如果同意,我可以将其添加到答案中。
  • 仔细检查正在搜索的字符串内容的一种方法是查看:return_value.string

标签: python regex python-2.7


【解决方案1】:

您不需要正则表达式来执行此操作。你可以做得更容易。

例如:

>>> f = open("test.txt", "r")
>>> fr = f.read()
>>> if "lorem" in fr:
...    print "true"

是的

希望对你有帮助。

编辑:

时间测试器:

如果 str 在 str 中:

t = Timer("""if 'lorem' in open('test.txt', 'r').read(): print 'true'""")
print t.timeit()

19.9183969498

正则表达式搜索:

t = Timer("""import re
print re.search(r'lorem', open('test.txt', 'r').read())
""")
print t.timeit()

31.3400061131

注意:timeit() 函数重复 100 万次。

结论:“if str in str”要快得多。

【讨论】:

  • 感谢您提供另一种方法。在非常简单的情况下,我可以看到自己这样做,但我想使用正则表达式的好处是您可以在模式中添加特殊字符,所以更容易缩小搜索过滤器的范围。您还知道什么执行得更快,REGEX 还是您给我的示例?
猜你喜欢
  • 2017-11-26
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2016-04-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多