Я хочу перевести текст фиксированной длины в XML, и я использую RegEx для этого.В позиции 36 каждой строки текстового файла указано «Инициал пользователя», для которого требуется 1 алфавитно-цифровое значение.но иногда это пусто.Поэтому я использую шаблон RegEx, например [a-zA-Z \ s] {1}, который хорош, либо соответствует 1 буквенно-цифровому, либо пустому.Но когда я выполняю проверку с использованием схемы, схема говорит, что мой RegEx не совпадает с его \ p {L} {1}, что означает, что это может быть только буква.Так что мне делать на моем RegEx?или они должны изменить либо шаблон текстового файла, либо изменить схему.Вот мой пример кода:
Dim linePattern2 As New Regex("^(?<type_code>\d{3})(?<snm>[a-zA-Z0-9\s.\']{20})(?<gvn_nm>[a-zA-Z0-9\s.\']{12})(?<init>[\p{L} ]{1})(?<sin>\d{9})(?<rcpnt_bn>[a-zA-Z0-9\s.\']{15})(?<l1_nm>[a-zA-Z0-9\s.\']{30})(?<l2_nm>[a-zA-Z0-9\s.\']{30})")
Dim settings As New XmlWriterSettings()
settings.Indent = True
Using writer As XmlWriter = XmlWriter.Create(xmlOutput, settings)
writer.WriteStartDocument()
writer.WriteStartElement("Submission")
writer.WriteAttributeString("xmlns", "xsi", Nothing, "http://www.w3.org/2001/XMLSchema-instance")
writer.WriteAttributeString("xsi", "noNamespaceSchemaLocation", Nothing, "c:\schema\layout-topologie.xsd")
writer.WriteStartElement("Return")
writer.WriteStartElement("T4A")
Using reader As New StreamReader(textInput)
While Not reader.EndOfStream
Dim line As String = reader.ReadLine()
Dim match2 As Match = linePattern2.Match(line)
If match2.Success Then
writer.WriteStartElement("T4ASlip")
writer.WriteStartElement("RCPNT_NM")
writer.WriteElementString("snm", match2.Groups("snm").Value)
writer.WriteElementString("gvn_nm", match2.Groups("gvn_nm").Value)
writer.WriteElementString("init", match2.Groups("init").Value)
writer.WriteEndElement()
writer.WriteElementString("sin", match2.Groups("sin").Value)
writer.WriteElementString("rcpnt_bn", match2.Groups("rcpnt_bn").Value)
End If
End While
End Using
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteEndDocument()
End Using
Вот часть текстового файла:
100AASERUDE RUSSELL ALAN 663345678000000000000000
Ошибка проверки схемы:
'init': value ''не соответствует фасету регулярного выражения' \ p {L} {1} '
Заранее спасибо!