【问题标题】:How to prevent Python from escaping special characters when reading a regex from a text file?从文本文件中读取正则表达式时,如何防止 Python 转义特殊字符?
【发布时间】:2011-11-05 20:01:33
【问题描述】:

我正在阅读 Python 中的一个文本文件,其中包含预先编写的正则表达式,稍后将用于匹配。文本文件格式如下:

...

--> 任务2

连接并打印字符串“Hello”和“world!”到屏幕上。

--> 回答

你好,世界!

print(\"你好,\s\"\s*+\s*\"世界!\")

--> 提示1

您可以使用 + 运算符连接两个字符串

...

根据任务接受用户输入,并在子流程中执行以查看返回值或与正则表达式匹配。但是,问题是 python 的 file.readline() 将转义正则表达式字符串中的所有特殊字符(即反斜杠),给我一些没用的东西。

我尝试以字节的形式读取文件并使用 'raw_unicode_escape' 参数对行进行解码(描述为生成“适合作为 Python 源代码中的原始 Unicode 文字的字符串”),但没有骰子:

file.open(filename, 'rb')
for line in file:
  line = line.decode('raw_unicode_escape')
  ...

我是不是走错了路?

感谢所有帮助。

附言我也发现了这个问题:Issue while reading special characters from file。但是,当我使用file.open(filename, 'r', encoding='utf-8')时,我仍然遇到同样的问题。

【问题讨论】:

    标签: python regex file-io python-3.x


    【解决方案1】:

    Python 正则表达式模式只是普通的旧字符串。将它们存储在文件中应该没有问题。也许当您使用file.readline() 时,您看到的是转义字符,因为您正在查看该行的repr?但是,当您实际将模式用作正则表达式时,这应该不是问题:

    import re
    filename='/tmp/test.txt'
    with open(filename,'w') as f:
        f.write(r'\"Hello,\s\"\s*\+\s*\"world!\"')
    
    with open(filename,'r') as f:
        pat = f.readline()
        print(pat)
        # \"Hello,\s\"\s*\+\s*\"world!\"
        print(repr(pat))
        # '\\"Hello,\\s\\"\\s*\\+\\s*\\"world!\\"'
        assert re.search(pat,'  "Hello, " +   "world!"')  # Shows match was found
    

    【讨论】:

    • 这是一次令人沮丧的经历。你是对的,谢谢;我在看 repr(string)。
    • 而您应该使用 repr(string),否则您将无法获得字符串中实际内容的明确表示。你只需要了解发生了什么。仅仅读取文件不会进行任何转义或取消转义。
    • 感谢约翰的补充。我同意。我对这一切还比较陌生,犯这样的错误肯定能让我更好地了解后台发生的事情。
    • 哎呀,我已经敲了一个小时了。感谢您提供线索。
    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多