Я экспортировал файл 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
являетсяседсинтаксис, вы можете захотеть иметь просто /MATCH/OPTIONS
или MATCH
и заменить его на 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