使用尾随空格在字符串后面获取字符串

时间:2013-08-06 10:18:26

标签: regex

我目前需要弄清楚如何使用正则表达式,并且达到了我似乎没有想到的一点: 作为源的测试字符串(它们实际上来自OCR的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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

这对我有用:

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

http://regexr.com?35rj6

答案 3 :(得分:0)

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

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

我建议也要与标签匹配:

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