RegEx 从 Excel 导出的 CSV 中删除 CRLF

RegEx 从 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/OPTIONSMATCH并将其替换为REPLACE。取决于您计划如何使用正则表达式。我相信根据您的描述,中间一个最适合。

答案3

我不知道正则表达式的任何实际实现是否支持可变长度后视,但理论上正则表达式看起来像这样(替换函数的第二个参数将是一个空格):

(?<=\*\*\*[^#]*)\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

相关内容