Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式和八进制字符_Python_Regex_String_Octal - Fatal编程技术网

Python 正则表达式和八进制字符

Python 正则表达式和八进制字符,python,regex,string,octal,Python,Regex,String,Octal,我正在尝试编写一个捕获八进制字符的正则表达式 例如,如果我与正则表达式比较的行是: char x = '\077'; 我想让我的正则表达式捕获'\077' 我试图通过re模块和以下形式的正则表达式来完成此操作: "'\\[0-7]{1-3}'" 但这并没有捕获八进制字符。在Python中如何使用正则表达式识别八进制字符 编辑: 作为我的意思的一个例子,考虑C代码: char x = '\077'; printf("%c", x); 我想从第一行捕获'\077' 编辑: 在测试了这个线程中

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

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

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)

如果行为:
char='\077',则将生成
'\077'


谢谢大家的帮助。

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

>>> 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)
输出:
077


如果你想要
077
,但你有
\077
哪个python会转换成
,因为这是
\077
表示的值。所以你需要得到
的整数值,然后得到
八进制值。

我不明白你到底想要什么

如果要捕获角色的八进制代码,可以执行以下操作:

s = r"char x = '\077';"
codes = re.findall(r"\\([0-7]{3})", s)
但是,如果需要字符,则必须添加:

characters = [chr(int(c, 8)) for c in codes]
如果您的目的是
字节
(Python 3):

或其他字符串:

str_result = ''.join(characters)

八进制是一个数字,以8为基数。这不是一个字符。试试@Stribizev.。范围是
[0-9]
。这是一个十进制范围而不是八进制,不是吗?我想
r“'\\0[0-7]{2}'
是你需要的。请参阅我认为这应该是转换为原始字符串的技巧:
s=s.replace(“\\”,“\\\\”)
[0-9]
[0-7]
characters = [chr(int(c, 8)) for c in codes]
bytes_result = bytes(characters)
str_result = ''.join(characters)