Регулярное выражение и Восьмеричные символы
Я пытаюсь написать регулярное выражение, которое захватывает восьмеричные символы.
Например, если строка, которую я сравниваю с моим регулярным выражением:
char x = '77';
Я хочу, чтобы мое регулярное выражение захватило '77'
Я попытался сделать это через модуль re и регулярное выражение вида:
"'\[0-7]{1-3}'"
Но это не захватывает восьмеричный символ. Как можно идентифицировать восьмеричные символы с помощью регулярных выражений в Python?
Правка:
В качестве примера того, что я имею в виду, рассмотрим C код:
char x = '77';
printf("%c", x);
Я хотел бы захватить '77'
с первой строки.
Правка:
После тестирования некоторых предложений в этой теме, у меня есть случай, который работает. Я понимаю, что после добавления восьмеричного регулярного выражения к большему регулярному выражению мне нужно было добавить префикс 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)
Который произведет '77'
Если линия: char = '77';
Спасибо всем за помощь.
3 ответа:
Вам нужно определить входные данные как необработанная строка:
Префикс>>> 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)
Я не совсем понял, чего вы хотите.
Если вы хотите захватить восьмеричный код для символа, вы можете сделать:
Но если вам нужны символы, вы должны добавить: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)
import re x="""char x = '\077'; printf("%c", x);""" print oct(ord(re.findall(r"'([^']*)'",x)[0]))
Вывод:
077
Проблема, если вы хотите
077
, но у вас есть\077
, который python преобразует в?
, так как это значение\077
represents.So вам нужно получить целое значение?
, а затем получить значениеoctal
.