2013-08-06 140 views
1

我目前需要弄清楚如何使用正則表達式,並得出了一個我似乎並沒有弄清楚的地方: 作爲源的測試字符串(它們實際上來自OCR' d PDFs):獲取字符串與尾隨空格後字符串

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]*)(.*) 
+6

等待,你只想數字吧?那麼就使用 - '(\ d +) - (\ d +)$'? –

+0

我在那裏增加了\ t。編輯 – Sebastian

回答

0

只是用更多限制的圖案([^ ]+$例如)取代(.*)。還要注意,Beleg-Nr之後的.也與其他字符匹配。

在我的例子中$匹配行的末尾,從而確保所有字符都被匹配。

我建議以匹配選項卡以及:

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

您可以使用「\」特殊符號,包括空間和標籤(這樣,你不需要它結合成通過組[])。

2

問題是[ ]*會匹配只有空格。您需要使用\s將匹配任何空白字符(更具體\s[\f\n\r\t\v\u00A0\u2028\u2029]):

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

旁註: *是默認的貪婪,所以它會嘗試儘可能匹配空格的最大數量,所以你在最後的()組中不需要使用否定[^\s]

+0

這適用於我的2個測試文檔。但不知何故,客戶文檔仍然混亂,數字之前有空白。 – Sebastian

+0

你能舉一個非工作條目的例子嗎? – mishik

+0

那麼,\ s'的存在取決於使用哪個正則表達式實現,對吧? – urzeit