正则表达式和八进制字符

时间:2016-01-12 17:27:00

标签: python regex string octal

我正在尝试编写一个捕获八进制字符的正则表达式。

例如,如果我正在与我的正则表达式进行比较的行是:

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';

感谢大家的帮助。

3 个答案:

答案 0 :(得分:2)

您需要将输入定义为原始字符串

>>> str = r"char x = '\077'; \nprintf(\"%c\", x);"

前缀r用于定义原始字符串。

然后使用:

>>> print re.findall(ur"'\\[0-7]{1,3}'", str)
["'\\077'"]

RegEx Demo

从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值。