Filehelpers BeforeReadRecords Event에서 두 개의 큰 따옴표가있는 필드에서 모든 작은 "큰 따옴표"를 조작하려면 정규식이 필요합니다.
CSV 콘텐츠 :
"Mine"s Minesweeper", "Yours"s Minesweeper", "Uncle Sam"s Minesweeper"
"Mine"s Minesweeper2", "Yours"s Minesweeper2", "Unknown Minesweeper3"
모든 내부 큰 따옴표를 대체하기 위해 vb.net 정규식을 만드는 데 도움이 필요합니다. 현재 우리는 아래 approrach를 사용하고 있습니까?
Dim engine As New FileHelperEngine(cb.CreateRecordClass())
AddHandler engine.BeforeReadRecord, AddressOf BeforeReadRecordHandler
이벤트 코드
Sub BeforeReadRecordHandler(engine As EngineBase, e As FileHelpers.Events.BeforeReadEventArgs(Of Object))
Try
Dim newLine As String = ""
Dim sep As String = ""
Dim arr() As String = e.RecordLine.Split(",")
arr.AsParallel().ForAll(Sub(x)
If x.Length > 1 Then
newLine = String.Format("{0}{1}{2}", newLine, sep, x.Substring(1, IIf(x.Length <= 2, 0, x.Length - 2)).Replace("""", """"""))
Else
newLine = String.Format("{0}{1}{2}", newLine, sep, x)
End If
sep = ","
End Sub)
e.RecordLine = newLine
Catch ex As Exception
End Try
End Sub
에 대한 정규식을 생성하려고합니다.
String.Format("{0}{1}{2}", newLine, sep, x.Substring(1, IIf(x.Length <= 2, 0, x.Length - 2)).Replace("""", """""")).
출력은
CSV Content:
"Mine""s Minesweeper", "Yours""s Minesweeper", "Uncle Sam""s Minesweeper"
"Mine""s Minesweeper2", "Yours""s Minesweeper2", "Unknown Minesweeper3"
.Net은 임의 길이의 lookbehind를 지원하므로 다음을 사용할 수 있습니다.
(?<!(^|,)\s*)"(?!\s*($|,))
함께 사용
Regexp.replace(input,(?<!(^|,)\s*)"(?!\s*($|,)),"""""",RegexOptions.Multiline)
이것은 줄의 시작이나 쉼표가 앞에 나오지 않고 문자열이나 쉼표의 끝이 뒤 따르지 않는 모든 "와 일치합니다. 두 조건 모두 임의의 양의 공백을 무시합니다.
CSV의 항목이 따옴표로 묶여 있지 않거나 항목 텍스트에 쉼표가 있으면 오작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다