正则表达式和八进制字符
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'"]
从标准输入读取文本并应用正则表达式的代码:
#!/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)
我正在尝试编写一个捕获八进制字符的正则表达式。
例如,如果我要与我的正则表达式进行比较的行是:
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'"]
从标准输入读取文本并应用正则表达式的代码:
#!/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)