2012-05-08 3 views
0

Я ищу способ поиска текстового файла для цитат, сделанных автором, а затем распечатать их. Мой сценарий до сих пор:Поиск котировок с регулярным выражением

import re 

    #searches end of string 
    print re.search('"$', 'i am searching for quotes"') 

    #searches start of string 
    print re.search('^"' , '"i am searching for quotes"') 

То, что я хотел бы сделать

import re 

## load text file 
quotelist = open('A.txt','r').read() 

## search for strings contained with quotation marks 
re.search ("-", quotelist) 

## Store in list or Dict 
Dict = quotelist 

## Print quotes 
print Dict 

Я также попытался

import re 

buffer = open('bbc.txt','r').read() 

quotes = re.findall(r'.*"[^"].*".*', buffer) 
for quote in quotes: 
    print quote 

# Add quotes to list 

l = [] 
    for quote in quotes: 
    print quote 
    l.append(quote) 
+1

Кто-то пытается обманывают их домашнюю работу по чтению, не так ли ... – Cryptite

+1

'" [^ "] *" '... –

ответ

-2

Вам не нужны регулярные выражения, чтобы найти статические строки. Вы должны использовать этот Python идиомы для поиска строк:

>>> haystack = 'this is the string to search!' 
>>> needle = '!' 
>>> if needle in haystack: 
     print 'Found', needle 

Создание списка достаточно легко -

>>> matches = [] 

Запоминание матчей легко тоже ...

>>> matches.append('add this string to matches') 

Это должно быть достаточно чтобы вы начали. Удачи!

Дополнение обратиться комментарий ниже ...

l = [] 
for quote in matches: 
    print quote 
    l.append(quote) 
+0

-1: OP действительно не ищет статические строки. Regex оправдан в этом случае. –

+0

OP не редактировал, когда я ответил. Первоначально он искал один - и назвал его кавычкой. – jaime

+0

Приветствия @jaime я не заметил этого таится здесь ... так из кода в верхней части страницы 'кода импорта повторно буфера = открыт («bbc.txt»,«г»). чтения() котировки = re.findall для цитаты в кавычках (г, буфер»* "[^"] *» *...): печать цитата QL = [] QL.append (цитата) ' только что добавляет последнюю цитату, напечатанную Я пробовал QL.append (цитата в кавычки) и все, что я получаю, является истинным заявлением любые идеи? – aromamode

2

Разработка регулярное выражение, которое соответствует всем ожидаемые символы, которые вы ожидали бы увидеть внутри строки в кавычках. Затем используйте метод python findall в re, чтобы найти все вхождения в совпадение.

import re 

buffer = open('file.txt','r').read() 

quotes = re.findall(r'"[^"]*"',buffer) 
for quote in quotes: 
    print quote 

Поиск между "и» требует поиска юникода-регулярное выражение, такие как:

quotes = re.findall(ur'"[^\u201d]*\u201d',buffer) 

И для документа, который использует "и» взаимозаменяемы для прекращения котировальный

quotes = re.findall(ur'"[^"^\u201d]*["\u201d]', buffer) 
+0

Да ... У меня есть привычка написания всех случаев в моих повторных матчах ... Я отредактирую ответ, чтобы включить более простой способ. – lukecampbell

+0

Помните, что не все строки ASCII. Ваш класс персонажа, вероятно, включает в себя все символы без кавычек * ASCII *, но как насчет таких вещей, как акцентированные символы (которые могли бы законно отображаться в авторских кавычках?). Лучше занести в черный список конкретный персонаж, которого вы не хотите, вместо того, чтобы пытаться белым списком все символы, которые вы * делаете * хотите. –

+0

Да, согласен, для случаев, отличных от ASCII, пожалуйста, расширьте класс символов, чтобы включить классы Unicode. См. Http://docs.python.org/library/re.html для получения дополнительной информации о классах символов и методах с помощью 're' – lukecampbell