1

我目前需要弄清楚如何使用正则表达式,并且到了一个我似乎没有弄清楚的点:作为源的测试字符串(它们实际上来自 OCR'd PDF):

string1 = 'Beleg-Nr.:12123-23131'; // no spaces after the colon
string2 = 'Beleg-Nr.:    12121-214331'; // a tab after the colon
string3 = 'Beleg-Nr.:        12-982831'; // a tab and spaces after the colon

我想明确地得到这些数字。为此,我使用这种模式:

pattern = '/(?<=Beleg-Nr\.:[ \t]*)(.*)

这将为我提供纯数字string1string2但无法正常工作string3(它在数字前给了我额外的空格)。

我在这里想念什么?

编辑:感谢所有有用的建议。即时 OCR 的软件能够在正则表达式中自行抑制空格。这成功了。结果模式是:

(?<=Beleg-Nr\.:[\s]*)(.*)
4

4 回答 4

3

您可以使用“\s”特殊符号来包含空格和制表符(因此,您不需要通过 [] 将其组合成一个组)。

于 2013-08-06T10:24:20.033 回答
2

问题是它只会[ ]*匹配空格。您需要使用which 将匹配任何空白字符(更具体地说是):\s\s[\f\n\r\t\v\u00A0\u2028\u2029]

/(?<=Beleg-Nr.:\s*)(.*)/

旁注: *默认情况下是贪婪的,因此它将尝试匹配可能的最大空格数,因此您不需要[^\s]在最后一()组中使用负数。

于 2013-08-06T10:26:04.793 回答
2

这对我有用:

/(Beleg-Nr.:\s*)(.*)/

http://regexr.com?35rj6

于 2013-08-06T10:28:04.237 回答
0

只需将 替换(.*)为更具限制性的模式([^ ]+$例如)。另请注意,.Beleg-Nr 之后的字符也与其他字符匹配。

$我的示例中,匹配行尾,从而确保匹配所有字符。

我建议也匹配标签:

pattern = '/(?<=Beleg-Nr\.:[ \t]*)([^ \t]+)$
于 2013-08-06T10:23:13.467 回答