正则表达式和八进制字符

Regex and Octal Characters

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

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

char x = '7';

我希望我的正则表达式能够捕获 '7'

我试图通过 re 模块和以下形式的正则表达式来做到这一点:

"'\[0-7]{1-3}'"

但这并没有捕获八进制字符。如何在 Python?

中使用正则表达式识别八进制字符

编辑:

作为我的意思的一个例子,考虑 C 代码:

char x = '7'; 
printf("%c", x);

我想从第一行开始捕捉 '7'

编辑:

在测试了此线程中的一些建议后,我找到了一个可行的案例。我意识到在将八进制正则表达式添加到更大的正则表达式之后,我需要为原始输入添加 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 = '7';

,将生成 '7'

感谢大家的帮助。

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

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

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

然后使用:

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

RegEx Demo


从标准输入读取文本并应用正则表达式的代码:

#!/usr/bin/python
import sys
import re

str = sys.stdin.read()
print re.findall(ur"'\[0-7]{1,3}'", str)
import re
x="""char x = '7';
  printf("%c", x);"""


print oct(ord(re.findall(r"'([^']*)'",x)[0]))

输出:077

如果你想要 077 但你有 7 的问题 python 将转换为 ? 因为这是值 7 represents.So 你需要获取 ? 的整数值,然后获取 octal 值。

我没明白你到底想要什么

如果要捕获字符的八进制代码,可以这样做:

s = r"char x = '7';"
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)