Excel ファイルを CSV にエクスポートしましたが、その中には複数行が多数あります。各行の先頭を *** でマークし、末尾を ### でマークしました。
*** some
text within
my cell to
export ###
誰か、このテキストファイルからCRLFを削除して次のようになるRexEx式を教えてもらえませんか?
*** some text within my cell to export ###
答え1
マクロで実行しました:
Dim pobjCell As Range
Dim plCharCounter As Long
Dim psCellText As String
For Each pobjCell In Selection
psCellText = pobjCell.Text
Do While InStr(psCellText, vbLf) > 0
psCellText = Replace$(psCellText, vbLf, " ")
Loop
pobjCell.Value = psCellText
Next
答え2
s/[\n\r ]+/ /g
これにより、すべてのスペース、復帰、改行が[\n\r ]+
スペース ( ) にグローバルに置き換えられます。
s/\*\*\(*.*)[\n\r ]+(.*)###/$1 $2/g
***
これは、文が で始まりで終わると想定する前のバージョンです###
。
s/^\*\*\*(.*)[\n\r ]+(.*)###$/$1 $2/g
***
これは、行の先頭で始まり、###
行の末尾で終わることも確認する前のバージョンです。これらのいずれかが、必要な内容に一致するはずです。
s/MATCH/REPLACE/OPTIONS
はsed/MATCH/OPTIONS
構文では、またはだけを使用してMATCH
、 に置き換える必要があるかもしれませんREPLACE
。正規表現をどのように使用するかによって異なります。説明を考慮すると、真ん中のものが最適だと思います。
答え3
正規表現の実際の実装が可変長の後読みをサポートしているかどうかはわかりませんが、理論的には正規表現は次のようになります (置換関数の 2 番目の引数はスペースになります)。
(?<=\*\*\*[^#]*)\n(?=[^#]*###)
実際には、csv パーサーは文字列内の新しい行 (二重引用符の間) と行間の新しい行を区別するため、これは問題にならないはずです...
\n
ただし、行の終わりを特殊な文字シーケンス (例: "@@@") でマークし、すべての新しい行をスペースに置き換えてから、
@@@
新しい行に置き換えることは可能です\n
...
答え4
CSV ファイルの入力を受け取り、*** で始まり ### で終わる行を結合してファイルを出力する VBS はどうでしょうか?
Option Explicit
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim bStripNewline, sOutput, sLine : bStripNewline = False
If WScript.Arguments.Count = 0 Then
WScript.Echo "Usage: " & WScript.ScriptName & " <file>"
WScript.Quit
End If
Dim oFile : Set oFile = fso.OpenTextFile(Wscript.Arguments(0), 1)
Do Until oFile.AtEndOfStream
sLine = oFile.ReadLine
If Left(sLine, 3) = "***" Then
bStripNewLine = True
sLine = Mid(sLine, 4, Len(sLine))
ElseIf Right(sLine, 3) = "###" and bStripNewLine = True Then
bStripNewline = False
sLine = Left(sLine, Len(sLine)-3)
End If
sOutput = sOutput & sLine
If bStripNewline = False Then sOutput = sOutput & VbCrLf
Loop
oFile.Close
Set fso = Nothing
WScript.Echo sOutput
ファイルに保存し、次のようにコマンドラインから実行します。
cscript //NOLOGO nameofscript.vbs <name of csv file> > <new file>
サンプル入力ファイル:
the quick brown
*** some
text within
my cell to
export ###
fox jumps
***over
the
lazy###
dog
one two three
次の出力が生成されます。
the quick brown
sometext withinmy cell toexport
fox jumps
overthe lazy
dog
one two three