正则表达式只提取特定字符和EOL

时间:2013-08-06 07:43:46

标签: regex

我正在尝试使用正则表达式提取一些文本。 我想只提取那些包含“pour 1e”或“Pour 1€”的行,仅此而已。 正则表达式必须是敏感的。

这是我的正则表达式,不能像我想的那样工作:

/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€

2 个答案:

答案 0 :(得分:2)

^处于活动状态时,您需要使用$/m来锚定表达式,该表达式匹配行的开头/结尾。例如:

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

答案 1 :(得分: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”开头后跟一个或多个数字的行,然后是一个可选的逗号或带2位数的小数点,然后是欧元符号或字母e,以及任意数量的尾随空格,但没有其他字符直到行尾,并且不区分大小写:

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