正規表示式從 Excel 匯出的 CSV 中刪除 CRLF

正規表示式從 Excel 匯出的 CSV 中刪除 CRLF

我將 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/OPTIONSorMATCH並將其替換為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

相關內容