簡體   English   中英

如何在不推薦使用的 python fstrings 中使用轉義字符,而不轉換為原始字符串

[英]How to use escape characters in python fstrings deprecated, without converting to raw string

運行python3.10 -B -Wall testcode.py 時

我在我想修復的代碼中收到以下棄用警告

DeprecationWarning: invalid escape sequence '\:'
DeprecationWarning: invalid escape sequence '\:'
DeprecationWarning: invalid escape sequence '\s'

完整代碼是

import re

vid = r'[0-9a-fA-F]{4}'
pid = r'[0-9a-fA-F]{4}'
device = r'[\S]{8}'

pattern = f'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'

with open("datafile.txt", 'r') as ffile:
    r = re.compile(pattern)
    for line in ffile.readlines():
        if r.search(line):
            print(line)

和數據文本文件是

Port:/dev/ttyACM2 Type: A-Blah Desc: USB VID:PID=1234:1951 SER=0A0101294880
Port:/dev/ttyACM0 Type: J-Blah Desc: USB VID:PID=asdasdas:1651 SER=01B01G294880
Port:/dev/ttyACM8 Type: B-Blah Desc: USB VID:PID=1234:F503 SER=8D5VB1294FC1
Port:/dev/ttyACM7 Type: X-Blah Desc: USB VID:PID=53saas86:1251 SER=0010C1294646

所需(和實際)output

Port:/dev/ttyACM2 Type: A-Blah Desc: USB VID:PID=1234:1951 SER=0A0101294880
Port:/dev/ttyACM8 Type: B-Blah Desc: USB VID:PID=1234:F503 SER=8D5VB1294FC1

我知道如果我將模式轉換為原始 r'...' 警告 go 消失,但我希望能夠在沒有警告的情況下使用 fstrings? 有什么辦法嗎? 還是我應該只使用 fstring 的其他替代品?

您可以像在普通字符串中一樣在 f 字符串中轉義\ :使用另一個反斜杠。

pattern = f'USB VID\\:PID\\=({vid})\\:({pid})\\s\\SER\\=({device})'

像 Pycharm 這樣的 IDE 將為它做語法高亮:

Pycharm 語法高亮

原始字符串只會讓警告 go 消失,但它會破壞你的程序,因為像{pid}這樣的變量將成為字符串的一部分。 請注意 r-string 的語法突出顯示如何更改:

用於 r 字符串的 Pycharm

但是,您可以將 r-string 和 f-string 組合成 rf-string

pattern = rf'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'

語法突出顯示將顯示它有效,並且不會顯示棄用警告的波浪線。

用於 rf 字符串的 Pycharm

使用原始 fstring ( fr ):

>>> vid = 123
>>> pid = 123
>>> device = 123
>>> pattern = fr'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'
>>> pattern
'USB VID\\:PID\\=(123)\\:(123)\\s\\SER\\=(123)'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM