我目前需要弄清楚如何使用正则表达式,并且达到了我似乎没有想到的一点: 作为源的测试字符串(它们实际上来自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]*)(.*)
这会为我提供string1
和string2
的纯数字,但不会在string3
上工作(它会在数字之前为我提供额外的空格)。
我在这里缺少什么?
编辑:感谢所有有用的建议。 OCR在运行中的软件能够在正则表达式中自行压缩空白。这样做了。结果模式是:
(?<=Beleg-Nr\.:[\s]*)(.*)
答案 0 :(得分:3)
您可以使用&#34; \ s&#34;包含空格和制表符的特殊符号(因此,您不需要通过[]将其组合成一个组。
答案 1 :(得分:2)
问题是[ ]*
只匹配 空格。您需要使用\s
来匹配任何空格字符(更具体地说,\s
是[\f\n\r\t\v\u00A0\u2028\u2029]
):
/(?<=Beleg-Nr.:\s*)(.*)/
旁注:
默认情况下*
是贪婪的,因此它会尝试匹配可能的最大空格数,因此您不需要在上一个[^\s]
组中使用否定()
。
答案 2 :(得分:2)
答案 3 :(得分:0)
只需将(.*)
替换为限制性更强的模式(例如[^ ]+$
)。另请注意,Beleg-Nr之后的.
也与其他字符匹配。
我的示例中的$
匹配行的结尾,从而确保所有字符都匹配。
我建议也要与标签匹配:
pattern = '/(?<=Beleg-Nr\.:[ \t]*)([^ \t]+)$