我將 Excel 文件匯出為 CSV,其中確實有很多多行。我用 *** 標記每行的開頭,用 ### 標記結尾。
*** some
text within
my cell to
export ###
有人可以幫助我使用一些 RexEx 表達式來刪除此文字檔案中的 CRLF 以獲得它嗎
*** 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
orMATCH
並將其替換為REPLACE
.取決於您計劃如何使用正規表示式。根據您的描述,我相信中間的效果最好。
答案3
我不知道正規表示式的任何實際實作是否支援可變長度lookbehind,但理論上正規表示式看起來像這樣(替換函數的第二個參數將是一個空格):
(?<=\*\*\*[^#]*)\n(?=[^#]*###)
在實踐中,csv解析器確實區分字串內的新行(雙引號之間)和行之間的新行,所以這不應該是一個問題...
但是,可以使用特殊字元序列(例如“@@@”)標記行末尾,然後\n
用空格替換所有新行,然後
@@@
用新行替換\n
...
答案4
一些 VBS 接受 CSV 文件的輸入並輸出該文件,但以 *** 開頭並以 ### 結尾的行連接在一起,怎麼樣?
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