私は現在、スキャンソフトウェア「DrivveImage」を使用して、各紙から特定の情報を抽出しています。このソフトウェアを使用すると、必要に応じて特定の正規表現コードを実行できます。 UltraEdit RegexEngineで実行されているようです。
次のスキャン結果が得られます。
1. 21Sid1
2. Ordernr
3. E17222
4. By
5. Seller
文字列でテキストOrdernr
を検索してから、次の行E17222
を選択する必要があります。これは、スキャンしたドキュメントのファイル名になります。文字列内のこれら2つの値の正確な位置はわかりません。必要なテキストは常に次の行として続くため、Ordernr
に焦点を当てる必要があるのはそのためです。
私の要件は、これが機能するために、試合結果でE17222
だけが必要であるというものです。入力できるのは単純な正規表現のみです。
すでに素晴らしいスレッドがあります: 文字列を照合した後に単語を取得する正規表現
私は「\ bOrdernr\s +\K\S +」をテストしました。これはうまく機能します。
ソフトウェアが/ Kの使用を許可していないということはなかったでしょう。\Kを実装する他の方法はありますか?
継続
ただし、サンプルテキストに「Ordernr」の後ろの文字が含まれている場合、現在の回答は必要な範囲で機能しません。このサンプルのように:
21Sid1
Ordernr 1
E17222
沿って
売り手
現在のソリューションは、「次の行」ではなく「1」を取得します。これは「E17222 "。一致したグループで。この問題にさらに関与するために、それを指摘する必要がありました。
グーグルをしましたが、私が把握できることから、REGEXP.MATCH
の最後のパラメーターは使用するキャプチャグループです。つまり、\K
なしで独自の正規表現を使用し、抽出する番号にキャプチャグループを追加するだけで済みます。
\bOrdernr\s+(\S+)
これは、番号がキャプチャグループ1
に含まれることを意味します(一致全体が0
にあり、これは使用したと思います)。
ドキュメントは明確ではありませんが、構文は次のようになります。
REGEXP.MATCH(<ZoneName>, "REGEX", CaptureGroup)
使用する必要があることを意味します
REGEXP.MATCH(<ZoneName>, "\bOrdernr\s+(\S+)", 1)
ただし、ここにはかなりの推測があります...;)
ordernr[\r\n]+([^\r\n]+)
この正規表現は次のことを行います。
ordernr
部分文字列を見つけるordernr
キャプチャグループ1の後に行を配置しますライブデモ
https://regex101.com/r/dQ0gR6/1
サンプルテキスト
1. 21Sid1
2. Ordernr
3. E17222
4. By
5. Seller
サンプル一致
[0][0] = Ordernr
3. E17222
[0][1] = 3. E17222
NODE EXPLANATION
----------------------------------------------------------------------
ordernr 'ordernr'
----------------------------------------------------------------------
[\r\n]+ any character of: '\r' (carriage return),
'\n' (newline) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
[^\r\n]+ any character except: '\r' (carriage
return), '\n' (newline) (1 or more times
(matching the most amount possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
ルックアラウンドを使用してラインをキャプチャし、ordernr
がキャプチャグループ0に含まれないようにし、\r
と\n
のすべてのバリエーションに対応するため。
(?<=ordernr\r|ordernr\n|ordernr\r\n)[^\r\n]+
ライブデモ