0

2つの異なるアイテムに解析する必要がある2Dバーコードがあります。最初の式で最初の10文字(数字と文字)のみを読み取ってほしい。2番目の式最初の10文字を無視して、残りの文字(数字、文字、_)を読み取ります。残っている文字の総数は一貫していません。

これは、バーコードが読み取るもののサンプルです。20P0000002_0_DP-3_TR_DEBIT

助言がありますか?

4

2 に答える 2

10

正規表現は必要ありません。次のString.Substringようにします。

var first = barcode.Substring(0, 10);
var second = barcode.Substring(10);

次に、最初の部分が文字と数字だけであるかどうかを確認できますが、理論的には100%正確ではありません。

var isValid = first.All(char.IsLetterOrDigit);

またはより多くのprosaicで

var acceptable = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var isValid = first.All(c => acceptable.IndexOf(c.ToUpper()) != -1);
于 2012-12-12T16:03:49.443 に答える
2

最初の式では、これを使用します。

^([\dA-Za-z]{10})
  • ^= 文字列の先頭に一致
  • (= キャプチャ グループの開始
  • [= 一致する文字セットの開始
  • \d= すべての数字 (0 ~ 9) に一致
  • A-Za-z= すべての大文字と小文字に一致
  • ]= 終了文字セット
  • {10}= 前の文字セットの正確に 10 個に一致
  • )= キャプチャ グループの終了

2番目に、これ

^.{10}(.*)$
  • `^.{10} = 文字列の最初の 10 文字に一致します (ただし、キャプチャしないでください)
  • `(.*)$ = 文字列の最後まで残りのすべての文字をキャプチャします

編集:

コメントで指摘されているように、これら 2 つの式を 1 つに簡単に組み合わせることができます。

^([\dA-Za-z]{10})(.*)$

これにより、1 つの一致操作のみで 2 つのキャプチャ グループが生成されます。

最初の 10 文字が英数字のみであるかどうかが一致によってわかるため、RegEx を使用することが適切な解決策になる可能性があることに注意してください。内容に関係なく最初の 10 文字だけを取得しようとしている場合、RegEx はやり過ぎです。ただし、検証が必要な場合は、RegEx が適しています。ただし、パフォーマンスについて議論される可能性がありますが、とにかくパフォーマンスに影響を与える .NET を既に使用しています。

于 2012-12-12T16:07:26.020 に答える