2013-08-06 4 views
-4

Я пытаюсь извлечь текст, используя регулярное выражение. Я хочу извлечь только те строки, которые содержат «pour 1e» или «Pour 1 €», и больше ничего. Регулярное выражение должно быть чувствительным к положению.Regex extract only specific character и EOL

вот мое регулярное выражение, которое не работает, как я хочу:

/Pour ([0-9.,])(€|e)/im 

и это мой текст:

Tesseract Open Source OCR Engine v3.01 with Leptonica 
CARDEURS 
Horaire dejour de flhllll 5 19h00 
pour 1€ 
pour 1€ supplémentaire 
pour 1€ supplémentaire 
pour 1€ supplémentaire 
pour 1€ supplémentaire 
par€ supplémentaire 
Horaire de nuit de 19h00 5 flhllll 
pour 1,50€ 
pour 1€ supplémentaire + 300 minutes 
pour 1€ supplémentaire + 420 minutes 
La joumée de 24 heures 
35 minutes 
+ 30 minutes 
+ 35 minutes 
+ 40 minutes 
+ 45 minutes 
+ 50 minutes 
60 minutes 
15€ 


Tesseract Open Source OCR Engine v3.01 with Leptonica 
TARIFS 
PARKING CARNOT 
Homim de juur de 8:00 3 19:00 H01-aim de null de 19:00 5 8:00 
mains d‘ ggg heme : G1-atuit moins d‘ ggg heure : Gmtuil 
Pour 1e 
Pour 1e supplémenlaire 
Pour 1e suppléulentaire 
Pour 1e supplémmmm 
Pour 1e supplémmmm 
Par e supplémenlaiI€ 
40 minutes 
+ 40 minutes 
+ 45 minutes 
+ 50 minutes 
+ 55 minutes 
+ 55 minules 
Pour 1e so nzinules 
Pour 1e supplémenlaiI€ + 300 minllles 
Pour 1e 5upplémenlai1Q + 420 minules 
La journée a 
e 24 heums 15€ 
+0

Нужно или не хотите совместить 'pour 2 €' или 'pour 1,50e'? –

+0

Также, что вы подразумеваете под «ничего более»? «Содержит» означает, что на этой линии может быть другой контент. Или вы имели в виду «состоит из»? –

+0

** Pour 1e ** это хороший. ** Pour 1e supplémenlaire ** это нехорошо. @Tim Peitzcker Мне нужно каждое число с плавающей точкой, а не только 1. – beniamin

ответ

2

Вам нужно закрепить выражение с ^ и $, которые соответствуют началу/конец строки, когда активен /m. Например:

/^pour [0-9]+[0-9,.]*[e€]$/im 
+0

не работает. Если я удалю $ в конце, все строки, начинающиеся с pour, совпадают, а не только те, которые заканчиваются на e | € – beniamin

+0

@ user2655799: Конечно, поэтому вы не должны удалять '' '. Согласно вашему комментарию к вашему вопросу, это ответ, который вам нужен. –

+0

, но если я не удаляю $, регулярное выражение ничего не соответствует. – beniamin

1

использовать квадратные скобки [] указать группу символов, чтобы соответствовать, каретке ^, чтобы соответствовать началу строки и знака доллара $, чтобы соответствовать концу строки. В зависимости от регулярного выражения реализации вы используете, вы можете быть в состоянии передать i флаг, чтобы сделать это без учета регистра

/^Pour 1[€e]$/i 

Или обрабатывать случай явно с группами символов

/^[Pp][Oo][Uu][Rr] 1[€e]$/ 

Для сопоставления повторов, используйте * для соответствия 0 или более предыдущего символа, +, чтобы соответствовать 1 или более, и ? в соответствии с 0 или 1.

Вместо 1 в предыдущем, вы можете использовать

[0-9.]+ to match any 1 or more digits or decimal points 
[0-9]+\.?[0-9]* to match at least 1 digit follow by an optional decimal point and more digits 
[0-9]+[0-9,]*\.?[0-9]* to match at least 1 digit, optionally more digits and commas, followed by an optional decimal point and more digits 

Вы также можете использовать фигурные скобки {} явно указать число повторений (они должны быть экранированы с обратным косыми чертами \ в некоторых регулярных выражениях двигателей)

[0-9]{1,3} would match 1,2 or 3 digits 
[0-9]{3} would match exactly 3 digits 

Вы можете использовать круглые скобки () группы А часть шаблона регулярного выражения для обратной ссылки или повторения.

Таким образом, чтобы соответствовать строке, начинающейся с «Pour», за которой следуют 1 или более цифр, затем необязательная запятая или десятичная точка с 2 цифрами, затем символ или буква e e и любое количество конечных пробелов, но нет другие символы до конца строки и нечувствительны к регистру:

/^Pour [0-9]+([,.][0-9][0-9])?[€e][ ]*$/i