如何在不转换为原始字符串的情况下在 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
期望(和实际)输出
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'...' 警告就会消失,但我希望能够在没有警告的情况下使用 fstrings?
有什么办法吗?或者我应该使用其他替代品来替代 fstring?
您可以像在普通字符串中一样在 f 字符串中转义 \
:使用另一个反斜杠。
pattern = f'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'
像Pycharm这样的IDE会为它做语法高亮:
原始字符串只会让警告消失,但它会破坏您的程序,因为像 {pid}
这样的变量将成为字符串的一部分。请注意 r 字符串的语法高亮显示如何变化:
但是,您可以将 r 字符串和 f 字符串组合成 rf 字符串
pattern = rf'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'
语法高亮显示它有效,不会显示弃用警告的波浪线。
使用原始 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)'
当运行 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
期望(和实际)输出
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'...' 警告就会消失,但我希望能够在没有警告的情况下使用 fstrings? 有什么办法吗?或者我应该使用其他替代品来替代 fstring?
您可以像在普通字符串中一样在 f 字符串中转义 \
:使用另一个反斜杠。
pattern = f'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'
像Pycharm这样的IDE会为它做语法高亮:
原始字符串只会让警告消失,但它会破坏您的程序,因为像 {pid}
这样的变量将成为字符串的一部分。请注意 r 字符串的语法高亮显示如何变化:
但是,您可以将 r 字符串和 f 字符串组合成 rf 字符串
pattern = rf'USB VID\:PID\=({vid})\:({pid})\s\SER\=({device})'
语法高亮显示它有效,不会显示弃用警告的波浪线。
使用原始 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)'