1

私は現在、正規表現の使用方法を理解する必要があり、理解していないように見える点に到達しました:ソースであるテスト文字列(実際には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これにより、 andの純粋な数値が取得されますが、string2機能していstring3ません (数値の前に追加の空白が表示されます)。

ここで何が欠けていますか?

編集:すべての役立つアドバイスをありがとう。オンザフライで OCR を実行するソフトウェアは、正規表現で独自に空白を抑制することができます。これでうまくいきました。結果のパターンは次のとおりです。

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

4 に答える 4

2

問題は、スペースのみ[ ]*に一致することです。任意の空白文字に一致する whichを使用する必要があります(より具体的には) :\s\s[\f\n\r\t\v\u00A0\u2028\u2029]

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

サイドノート: *デフォルトでは貪欲であるため、可能な最大数の空白と一致させようとするため[^\s]、最後の()グループでネガティブを使用する必要はありません.

于 2013-08-06T10:26:04.793 に答える
0

(.*)をより制限的なパターンに置き換えるだけです([^ ]+$たとえば)。また、.Beleg-Nr の後ろは他の文字にも一致することに注意してください。

私の例の$は行末に一致するため、すべての文字が一致することが保証されます。

タブにも一致させることをお勧めします:

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