我正在尝试编写一个捕获八进制字符的正则表达式。
例如,如果我正在与我的正则表达式进行比较的行是:
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)
如果行为'\077'
char = '\077';
感谢大家的帮助。
答案 0 :(得分:2)
您需要将输入定义为原始字符串:
>>> str = r"char x = '\077'; \nprintf(\"%c\", x);"
前缀r
用于定义原始字符串。
然后使用:
>>> print re.findall(ur"'\\[0-7]{1,3}'", str)
["'\\077'"]
从stdin读取文本并应用正则表达式的代码:
#!/usr/bin/python
import sys
import re
str = sys.stdin.read()
print re.findall(ur"'\\[0-7]{1,3}'", str)
答案 1 :(得分:1)
我没有确切地知道你想要什么。
如果要捕获角色的八进制代码,可以执行以下操作:
s = r"char x = '\077';"
codes = re.findall(r"\\([0-7]{3})", s)
但是如果你想要这些角色,你必须添加:
characters = [chr(int(c, 8)) for c in codes]
如果您的意图是bytes
(Python 3):
bytes_result = bytes(characters)
或其他字符串:
str_result = ''.join(characters)
答案 2 :(得分:0)
import re
x="""char x = '\077';
printf("%c", x);"""
print oct(ord(re.findall(r"'([^']*)'",x)[0]))
输出:077
问题如果你想要077
但你有\077
哪个python会转换为?
,因为这是\077
代表的值。所以你需要得到整数值为?
,然后获取octal
值。