1

正規表現で検証する必要がある次のバーコードがあります。

TE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201

バーコードスキャナーでバーコードから一部の文字が切り取られることがあるという問題が発生しているため、次の正規表現ルールを使用して検証する必要があります。

  1. 「TE1310」で始まります
  2. スペース
  3. 2番目の文字セットは正確に8の長さです。数字や文字を含めることができます
  4. スペース
  5. 3番目のセットには正確に16文字が含まれています。数字または文字にすることができます
  6. スペース
  7. 4番目のセットは正確に「0013.0002.0000」である必要があります
  8. スペース
  9. 5番目と最後のセットには8文字が含まれています。数値のみ

私は次の正規表現を持っています。私はかなり近いですが、上記の#7(0013.0002.0000)を実行する方法がわかりません。「????」を配置しました この部分を実行する方法がわからない以下の正規表現に:

TE1310 \ s [A-Za-z0-9] {8} \ s [A-Za-z0-9] {16} \ s ???? \ s \ d {8}

これを行う方法はありますか?ありがとう

4

2 に答える 2

4

JavaScriptに似た正規表現構文を想定しているので、基本的な考え方は、私が知っている他の正規表現に変換できます。

1:TE1310以降

^TE1310

^文字列の先頭でのみ一致するために使用され、後続の文字は文字通り一致します。

2:スペース

/^TE1310 /

/正規表現内にスペース文字が実際に含まれていることを示すために、正規表現の区切り文字を追加しています。正規表現構文が代替区切り文字をサポートしている場合は、代わりにの行に沿って何かが表示される場合があります~^TE1310 ~

3:2番目の文字セットは正確に8の長さです。数字や文字を含めることができます

/^TE1310 [a-zA-Z0-9]{8}/

[abc]は、提供されたセット内の文字を選択するために使用されます。の使用は、a-zA-Z0-9任意の文字(大文字または小文字)または数字に一致することです。
{n}前のセレクター時間を繰り返すために使用されnます。

4:スペース

/^TE1310 [a-zA-Z0-9]{8} /

5:3番目のセットには正確に16文字が含まれています。数字または文字にすることができます

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16}/

6:スペース

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} /

7:4番目のセットは正確に0013.0002.0000

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000/

\..改行以外の文字のセレクターであるをエスケープするために使用されます。\文字列で正規表現を作成している場合は、文字をダブルエスケープする必要がある場合があるため、\\.代わりに\.

8:スペース

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 /

9:5番目の最終セットには8文字が含まれています。数値のみ

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 \d{8}/

\d数字と一致します。これは。と同等[0-9]です。同様に、キャラクター\.をダブルエスケープする必要があるかもしれません。\\\d

10:文字列の終わり

明示的に言及していませんが、一致はこのパターンに完全に一致する行にのみ一致する必要があり、末尾の数字/文字が後に続くことはないと思います。

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 \d{8}$/

$文字列の最後に一致させるために使用されます。

于 2012-09-25T19:53:49.063 に答える
2

#7些細なこと0013\.0002\.0000 ですが、ピリオドをエスケープし、言語で必要な場合はエスケープ文字をエスケープする必要があります。

だから、試してみてください

TE1310\s[A-Za-z0-9]{8}\s[A-Za-z0-9]{16}\s0013\.0002\.0000\s\d{8}

もちろん、残りのポイントが正しいと仮定します。

また、Sednus前述のように、文字列の最初と最後を一致させることもできます。従来の記号は^最初と$最後用ですが、念のため、特定の言語のリファレンスを確認します。

そうしないと、正規表現は次TE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201のような大きな文字列で何かを見つけます。

asgsdaTE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201qeasdfa

于 2012-09-25T19:44:06.487 に答える