我是否需要更改正则表达式上的任何内容?

时间:2011-02-18 20:02:43

标签: regex xsd

我想将固定长度的文本传输到XML,我使用RegEx来完成它。 在文本文件的每一行的位置36是关于'用户的初始',其需要1个字母数字。但有时它是空白的。 所以我使用像[a-zA-Z \ s] {1}这样的RegEx模式,它很好,它可以匹配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''与正则表达式facet不匹配'\ p {L} {1}'

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为这是你想要的正则表达式:

[\p{L} ]
  • \p{L}匹配任何字母,而不仅仅是ASCII字母([a-zA-Z])。它包括重音的ASCII字母,如Äñ,以及来自其他脚本和写作系统的“字母”,如希腊语,西里尔语,阿拉伯语,中文......任何Unicode已知的字母。

    < / LI>
  • 由于你的文本格式是固定长度的,我假设缺少的首字母用空格表示,而不是人们通常所期望的空字符串。我使用了文字空间,但是如果你真的想要允许TAB,换行或其他空格字符,你可以切换回\s

  • 正则表达式中的{1}没有用处。如果你想确保只允许一个字符,你通常添加锚点,如下所示:^[\p{L} ]$。但是在XML Schema中没有必要这样做,所有正则表达式总是固定在两端。