VB2010: RegEx を使用してテキスト ブロックを非識別化し、テキストを正規化しています。つまり、テキスト行を取得して名前と確認コードを非識別化し、テキストを正規化して、データが列に並ぶようにします。確認コードの前にさまざまな数のドットがあり、パッケージ ID が 2 ~ 4 文字の長さであるか、欠落している可能性がある最後の部分を除いて、ほとんどすべてを持っています。
'regex
Dim MyRegex As Regex = New Regex("(?<pre>^\s{0,2}(\d{1,3})\s(\d\d))(.+?)(?<post>\.\.(\d{1,3})\." + "(\w)\s((\w+?|\.\.)))(?<dots>\.+)(\w{6})", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
'this is the replacement string
Dim replacement As String = "${pre}******/*****${post}${dots}******"
'replace the matched text in the InputText using the replacement pattern
Dim result As String = MyRegex.Replace(Input, replacement)
各行に番号、名前、番号、その他のコード、パッケージ ID、および確認コードを含む私のテスト入力:
1 01SMITH/CH..1.A E2T......AAABBB
2 01MTC..1.A ..............CCCDDD
3 01GRIFFIN/JOHN..1.A E2...EEEFFF
4 01EL/MARY..1.Z E2XT......GGGHHH
5 02BUBBA/BILLY..2.A E2....IIIJJJ
6 01HILL/THOR..1.A E2WW....KKKLLL
これまでの私の出力:
1 01******/*****..1.A E2T......******
2 01******/*****..1.A ..............******
3 01******/*****..1.A E2...******
4 01******/*****..1.Z E2XT......******
5 02******/*****..2.A E2....******
6 01******/*****..1.A E2WW....******
名前と確認コードを匿名化していますが、確認コードの前のコード パッケージ ID が可変であるため、列の出力が失われています。それの端の部分にちょっと立ち往生していますが、本当に近いです。私はそれを1つの正規表現で行うことを目指していますが、それは不可能かもしれません. 正規表現の置換をパディングすることは可能ですか?
ソリューションで更新します。
'regex (added one more group for the package id so I can determine its length)
Dim MyRegex As Regex = New Regex("(?<pre>^\s{0,2}(\d{1,3})\s(\d\d))(.+?)(?<post>\.\.(\d{1,3})\.(\w)\s(?<pkid>(\w+?|\.\.)))(?<dots>\.+)(\w{6})", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
'use the MatchEvaluator to examine each match and adjust accordingly
deid = MyRegex.Replace(deid, New MatchEvaluator(Function(m As Match)
Return m.Groups("pre").Value &
"******/*****" &
m.Groups("post").Value &
New String("."c, 5 - m.Groups("pkid").Value.Length) &
"******"
End Function))
テストデータを実行すると、次のようになります。
-----Input------------------------------------------------
1 01SMITH/CH..1.A E2T......AAABBB
2 01MTC..1.A ..............CCCDDD
3 01GRIFFIN/JOHN..1.A E2...EEEFFF
4 01EL/MARY..1.Z E2XT......GGGHHH
5 02BUBBA/BILLY..2.A E2....IIIJJJ
6 01HILL/THOR..1.A E2WW....KKKLLL
-----Output-----------------------------------------------
1 01******/*****..1.A E2T..******
2 01******/*****..1.A .....******
3 01******/*****..1.A E2...******
4 01******/*****..1.Z E2XT.******
5 02******/*****..2.A E2...******
6 01******/*****..1.A E2WW.******
----------------------------------------------------------