查找包含标点符号的所有节点

时间:2017-08-14 17:42:56

标签: vb.net

我有一个非常大的XML文件,并且在每个主节点中都有一个子节点

<term>text, text</term>

这些子节点中的一些具有如上所示的标点符号,但是哪个标点符号未知。我需要获取这些子节点中使用的所有标点符号的列表,以便我可以直观地检查它们,然后用一个标点符号替换它们。

我已尝试使用正则表达式/<term>[[:punct:]]<\/term>,但在正则表达式测试中找不到匹配项。

如何将子节点中使用的所有标点符号复制到文本文件中?

如何用分号替换子节点中的所有标点符号?

这是一个示例节点,每个节点中有两次出现。

<conceptGrp><descripGrp><descrip type="subjectField">6821</descrip></descripGrp><languageGrp><language lang="DE" type="German" /><termGrp><term>Betonkanal BE;Betonkanal breites Ei</term><descripGrp><descrip type="termType">phraseologicalUnit</descrip></descripGrp><descripGrp><descrip type="reliabilityCode">2</descrip></descripGrp></termGrp></languageGrp><languageGrp><language lang="EN" type="English" /><termGrp><term>flattened egg-shaped concrete sewer</term><descripGrp><descrip type="termType">phraseologicalUnit</descrip></descripGrp><descripGrp><descrip type="reliabilityCode">2</descrip></descripGrp></termGrp></languageGrp></conceptGrp>

1 个答案:

答案 0 :(得分:0)

要回答您的第一个问题,您可以使用\p{P}来匹配标点字符。因此,假设您有一些迭代XML节点的方法,您需要检查...

Option Infer On
Option Strict On

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim x = <root>
                    <term>No punctuation</term>
                    <term>Here be... dots</term>
                    <term>No, there isn't a semi-colon here.</term>
                </root>

        Dim re As New Regex("\p{P}")

        For Each a In x.Descendants
            Dim puncs = re.Matches(a.Value)
            If puncs.Count > 0 Then
                For Each m As Match In puncs
                    'TODO: Write to a file instead of the Console.
                    Console.Write(m.Groups(0).Value)
                Next

                Console.WriteLine()

            End If
        Next

        Console.ReadLine()

    End Sub

End Module

输出

  

...
  “ - 。

对于问题的第二部分,您可以使用

For Each a In x.Descendants
    Dim newValue = re.Replace(a.Value, ";")
    'TODO: update the value of the node
    Console.WriteLine(newValue)
Next

输出

  

没有标点符号
  这是;;;点
  没有;这里没有半结肠;