2016-10-31 1 views
1

У меня есть большая текстовая строка, с init есть несколько блоков, которые выглядят очень похожими на это;Python regex для нахождения всего между двумя n n и n n

text = '\n\n(d)In the event of this happens a Fee 
of \xc2\xa32,000 gross, on each such occasion.\n\n' 

с помощью кода ниже я могу найти все экземпляры денег:

import re 
re.finall('\xa3(.*)', text) 

, но возвращает только до запятой In the event of this happens a Fee of \xc2\xa32,000 gross вместо целого блока, я надеюсь вернуть блок где Юникод для британских фунтов \xa3 является упоминает

+0

Почему не просто '' \ n \ n (. *) \ N \ n'' –

+0

@PatrickHaugh не будет возвращать каждый текстовый блок в текстовой строке? Я надеялся расчесывать это с помощью '' \ xa3 (. *) '' – user3191569

+1

' \ n \ n (. * \ Xa3. *) \ N \ n' –

ответ

0

Я предлагаю это регулярное выражение:

text = ('\n\nthis is not wanted\n\n' 
     '(d)In the event of this happens a Fee\n' 
     'of \xc2\xa32,000 gross, on each such occasion.\n\n' 
     'another wanted line with pound: \xc2\xa31,000\n\n' 
     'this is also not wanted\n\n') 

re.findall(r'(?:.+\n)*.*\xa3(?:.+\n)*', text) 

Найдет все многострочные блоки непустых строк, которые содержат по меньшей мере один \xa3.

Как указано в комментарии wiktor-stribiżew, это обнаруживает только те блоки, у которых есть другой символ после символа фунта; это похоже на то, что вы хотите, поэтому это не проблема, но это следует упомянуть.

+1

Этот 'r '(?:. + \ N) *. * \ Xa3 (?:. + \ N) *' - хороший пример разворачивания шаблона, но второй квантор' + 'не позволит шаблон соответствует символу в конце строки внутри подстроки. –

+0

Справа. В этом случае это кажется правильным. OP ожидает что-то после символа фунта (число). Но стоит упомянуть, так что спасибо! – Alfe

-1

Попробуйте это:

import re 
text = '\n\nblock1\xa3block1.\n\nblock2\x80block2\n\nblock3\xa3block3\n\n' 
result= re.findall('.*\xa3.*', text) #capture only blocks containing pound symbol and discards block2 that contains euro 
print(result) 
+0

Конечно, мы попробовали. У вас есть? Исходным вводом является 'text = '\ n \ n (d) В случае возникновения этого случается Fee \ n of \ xc2 \ xa32,000 брутто в каждом таком случае. \ N \ n''. Ваше регулярное выражение не возвращает часть строки между двойными разделителями строк. –

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