0

だから私は、複数の「フッター」を持つファイルを解析しようとしています (ファイルは、私の会社が電子的に保存したい印刷用に設計された出力です...各フッターは新しいページであり、新しいページはもはやとして必要)。

次のような行を探して削除しようとしています:

1 / 2122 PRINTED 07/01/2013 04:46 ページ: 1 / 11 2 / 2122 PRINTED 07/01/2013 04:46 ページ: 2 / 11 3 / 2122 11

等々

次に、最後の行 (「2122 の 2122」のようなもの) を「カスタム」フッターに置き換えたいと考えています。

私は正規表現を使用していますが、これを使用するのは非常に新しいので、これを達成するには正規表現をどのように表示すればよいですか? RegEx の「count」関数を使用して、最後の行がいつ見つかったかを確認し、それに対して .replace を実行する予定です。

VB .NET を使用していますが、必要に応じて C# を翻訳できます。やりたいことを達成するにはどうすればよいですか?具体的には、一致の数が 1 を超える限り、一致の一致/削除のみを気にします。

4

2 に答える 2

0

RegExr で作成したものを次に示します

/^(\d+\s+of\s+\d+)(?=\s+printed)/gim

行頭の (number)(space)('of')(space)(number) に一致し、その後に (space)('printed') が続く場合にのみ、大文字と小文字を区別しません。/m フラグは、^ と $ を行認識境界に変換します。

于 2013-07-10T20:51:00.367 に答える
0

これが私がそれをやった方法です...

Private Function FixFooters(ByVal fileInput As String, Optional ByVal numberToLeaveAlone As Integer = 1) As String
    Dim matchpattern As String = "^\d+\W+of\W+\d+\W+PRINTED.*$"
    Dim myRegEx As New Regex(matchpattern, RegexOptions.IgnoreCase Or RegexOptions.Multiline)
    Dim replacementstring As String = String.Empty
    Dim matchCounter As Integer = myRegEx.Matches(fileInput).Count
    If numberToLeaveAlone > matchCounter Then numberToLeaveAlone = matchCounter
    Return myRegEx.Replace(fileInput, replacementstring, matchCounter - numberToLeaveAlone, 0)
End Function

myregextester.com を使用して、最初の一致パターンを取得しました。最後のフッターをそのままにしておきたかったので (後でさらに操作するため)、すべての変数を削除しないように numberToLeaveAlone 変数を作成しました。このプログラムの目的のために、デフォルト値を 1 にしましたが、これをゼロに変更することもできます (呼び出しコードを読みやすくするためだけに変更しました。常に 1 を残しておきたいと思うからです...しかし、再利用したいです)コード)。かなり高速です。もっと良い方法があると思いますが、これが最も理にかなっています。

于 2013-07-11T16:51:25.743 に答える