2013-06-28 3 views
1

Я плохо себя чувствую с помощью материала Regexp, поэтому я не могу понять, почему это не работает. Я просто хочу, чтобы соответствовать две строки в пределах присваивания/уравнения, что-то вроде этого:Соответствие «...» = «...» в Python через Regex

"string1" = "string2"

В этом случае, я бы ожидать «string1» и «string2» к сопоставлению (без кавычек). Я попробовал следующее регулярное выражение, которое работает в регулярное выражение тестер я нашел в Интернете, но не в Python:

("[^"]*").=.("[^"]*")

В Python это будет выглядеть следующим образом:

matches = re.findall(r'("[^"]*").=.("[^"]*")', line)

Но как я уже сказал, это не сработает.

+0

Что означает 'print repr (line)' print? –

+0

Линия, смешанная с \ x00 между каждым символом. Это какая-то проблема кодирования? – bompf

ответ

4

Перемещение кавычки вне группы захвата, если вы не хотите, чтобы они были частью ваших матчей:

>>> matches = re.findall(r'"([^"]*)".=."([^"]*)"', line) 
>>> matches 
[('string1', 'string2')] 

Кроме того, поскольку у вас есть пространство вокруг вашего «=», вы просто должны соответствовать пространство. Точка "." соответствует любому символу.

+0

Странно, это отлично работает на интерактивном CLI для меня, но не в скрипте, с которым я хочу его использовать. Я прочитал строки через fileinput.input (...). Я попробовал сопоставить символ новой строки '\ n', но не имел никакого эффекта. – bompf

+0

Ваш ответ верный, но, оказывается, моя проблема была связана с кодировкой файла, который я читал, что было UTF-16. Мне пришлось передать 'openhook = fileinput.hook_encoded (" utf-16 ")' в fileinput.input (..), теперь он работает! – bompf