2015-03-20 3 views
1

Файл, который я пытаюсь проанализировать, заполнен множеством нулевых байтов (\x00). Команда \S (или различные другие команды пробела) не работают. Мне любопытно, как я могу получить все, НО нулевые байты.Поиск всего, кроме нулевого байта regex

Если бы можно было сделать что-то вроде \x01-xFF (вернуть все значения в пределах этого байтового диапазона), которые будут работать по назначению. Но насколько я знаю, регулярное выражение может искать только одиночные байты вместо диапазона байтов. Как можно было бы возвращать все строки между нулевыми байтами?

+0

Это isn 't ответ на ваш вопрос, но регулярные выражения могут искать диапазоны символов. Например, '[a-z]' будет соответствовать любой строчной букве. '[a-z0-9]' будет соответствовать любой строчной букве или номеру. – axblount

+0

Я знал об этом, но спасибо в любом случае. Я просто не был уверен, возможно ли это с байтами. – Calibre

ответ

1

Регулярное выражение Соответствует не нулевой символ:

r"[^\x00]" 

, но то, что вы хотите, чтобы удалить все нулевые символы и следующие суффиксы:

s = s.replace("\x00", "") 

где s является строкой ввода ,

+0

Спасибо, кажется, я пытался совместить всю строку, а не символ по символу. '[^ \ x00] +' работает по назначению. В документации на python '^' указан как «соответствует началу строки», а не «NOT»? – Calibre

+1

внутри скобок '^' имеет значение не – JuniorCompressor

+0

Большое спасибо, что прояснилось. – Calibre

2

Вы можете использовать translate метод строки для удаления \x00:

your_string.translate(None, '\x00') 

А для файла, который вы можете сделать:

open('in_file.txt').read().translate(None, '\x00') 

Или вы можете цикл по вашей линии и применять его на линии! И если вы хотите разделить свою строку, вы можете просто использовать str.split():

>>> s='this\x00isat\x00hes' 
>>> s.split('\x00') 
['this', 'isat', 'hes'] 
+0

Также хороший ответ, я хотел разделить строки, а не объединить их все вместе. – Calibre

+1

@Calibre, поэтому вы можете использовать 'str.split()' checkout the edit! – Kasramvd

Смежные вопросы