繁体   English   中英

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

[英]How to prevent Python from escaping special characters when reading a regex from a text file?

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

...

- >任务2

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

- >回答

你好,世界!

打印(\\ “你好,\\ 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')
  ...

我是以完全错误的方式来做这件事的吗?

感谢您的帮助。

ps我也发现了这个问题: 从文件中读取特殊字符时出现问题 但是,当我使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM