【发布时间】:2016-04-17 10:43:56
【问题描述】:
我正在尝试编写一个捕获八进制字符的正则表达式。
例如,如果我与正则表达式比较的行是:
char x = '\077';
我希望我的正则表达式捕获'\077'
我试图通过 re 模块和形式的正则表达式来做到这一点:
"'\\[0-7]{1-3}'"
但这并不能捕获八进制字符。 Python中如何使用正则表达式识别八进制字符?
编辑:
作为我的意思的一个例子,考虑一下 C 代码:
char x = '\077';
printf("%c", x);
我想从第一行捕获'\077'。
编辑:
在测试了此线程中的一些建议后,我有一个可行的案例。我意识到在将八进制正则表达式添加到更大的正则表达式之后,我需要为原始输入添加前缀 r,或者转义每个反斜杠,总共四个反斜杠。
例如,这两个都解决了问题:
regex = re.compile(r"\s*("
r"'\\0[0-7]{1,2}'" # octal
"|[a-zA-Z_][a-zA-Z_\d]*" # identifer
")")
regex.findall(line)
和
regex = re.compile(r"\s*("
"'\\\\0[0-7]{1,2}'" # octal
"|[a-zA-Z_][a-zA-Z_\d]*" # identifer
")")
regex.findall(line)
如果行是:char = '\077';,则会产生 '\077'
感谢大家的帮助。
【问题讨论】:
-
八进制是一个数字,以 8 为底。它不是一个字符。
-
@stribizhev..范围是
[0-9]..这是一个十进制范围而不是八进制,不是吗? -
我认为
r"'\\0[0-7]{2}'"是您所需要的。见updated code -
我认为这应该是转换为原始字符串的技巧:
s = s.replace("\\", "\\\\")?