我有一个非常大的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>
答案 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
输出
没有标点符号
这是;;;点
没有;这里没有半结肠;