簡體   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