Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止Python在从文本文件读取正则表达式时转义特殊字符?_Python_Regex_File Io_Python 3.x - Fatal编程技术网

如何防止Python在从文本文件读取正则表达式时转义特殊字符?

如何防止Python在从文本文件读取正则表达式时转义特殊字符?,python,regex,file-io,python-3.x,Python,Regex,File Io,Python 3.x,我正在阅读Python中的一个文本文件,其中包括预写的正则表达式,稍后将用于匹配。文本文件的格式如下: -->任务2 将字符串“Hello”和“world!”连接并打印到屏幕上 -->答复 你好,世界 打印(\“你好,\”\s*+\s*\“世界!\”) -->提示1 可以使用+运算符连接两个字符串 根据任务接受用户输入,或者在子流程中执行以查看返回值,或者与正则表达式匹配。不过,问题是python的file.readline()将转义正则表达式字符串中的所有特殊字符(即反斜杠),这给了我一些

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

-->任务2

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

-->答复

你好,世界

打印(\“你好,\”\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')
  ...
我是不是走错了路

谢谢你的帮助


p、 我也发现了这个问题:。然而,当我使用
file.open(filename'r',encoding='utf-8')
时,我仍然遇到同样的问题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),否则你就不会得到字符串中实际内容的明确表示。你只需要了解发生了什么。仅仅阅读一个文件并不能逃避或逃避。约翰,谢谢你的补充。我同意。我对这一切还是比较陌生的,犯这样的错误肯定会让我更好地理解背景中发生的事情。嘘,我已经讲了一个小时了。谢谢你的线索棒。