我有一个包含实体的文件。在有一个完整的数字实体和一个分段的数字实体的地方,我需要在它们之间放置一个</chapter>
结束元素。
我尝试将其放入数组。我尝试使用正则表达式:
/&Ch\d+\r\n&Ch\d+-\d+
文本文件示例:
&sc_Ch2;
&sc_Ch3;
&sc_Ch3-1;
&sc_Ch3-2;
&sc_Ch4;
&sc_Ch4-1;
&sc_Ch4-2;
&sc_Ch5;
&sc_Ch6;
&sc_Ch6-1;
&sc_Ch7;
&sc_Ch7-1;
&sc_Ch7-2;
&sc_Ch7-3;
&sc_Ch7-4;
&sc_Ch8;
结果将是:
&sc_Ch2;
&sc_Ch3;
&sc_Ch3-1;
&sc_Ch3-2;
</chapter>
&sc_Ch4;
&sc_Ch4-1;
&sc_Ch4-2;
</chapter>
&sc_Ch5;
&sc_Ch6;
&sc_Ch6-1;
</chapter>
&sc_Ch7;
&sc_Ch7-1;
&sc_Ch7-2;
&sc_Ch7-3;
&sc_Ch7-4;
</chapter>
&sc_Ch8;
如何解决此问题?
答案 0 :(得分:1)
如果这是实际的字符串序列,请尝试以下操作:在List(Of String)
中填充代表章节的行(从文件或任何其他来源读取)。
循环将向后读取列表,当当前行包含连字符而上一行没有时,在列表中插入字符串<chapter>
。
此代码假定章节定义(&sc_Ch[X];
)仅在此特定情况下包含连字符。
Dim chapters As List(Of String) = File.ReadAllLines("[File Path]").ToList()
Dim NotAChapter As Boolean = True
For line As Integer = chapters.Count - 1 To 0 Step -1
If chapters(line).Contains("-"c) Then
If NotAChapter Then chapters.Insert(line + 1, "<chapter>")
NotAChapter = False
Else
NotAChapter = True
End If
Next
' Name the file as you please
File.WriteAllLines("chapters_new.txt", chapters)
答案 1 :(得分:1)
一种未经检验的理论(我已经用完了,得走了),看起来很不错,可能会激发一个想法
For i As Integer = 0 To 8
Dim yourText As String = "&sc_Ch2;
&sc_Ch3;
&sc_Ch3-1;
&sc_Ch3-2;
&sc_Ch4;
&sc_Ch4-1;
&sc_Ch4-2;
&sc_Ch5;
&sc_Ch6;
&sc_Ch6-1;
&sc_Ch7;
&sc_Ch7-1;
&sc_Ch7-2;
&sc_Ch7-3;
&sc_Ch7-4;
&sc_Ch8;"
Dim str As String = "Ch" & i
yourText.Insert("</chapter>", yourText.LastIndexOf(str) + 2)
Next
答案 2 :(得分:0)
您可以将变体与-
匹配,并使用正向先行断言右边的内容是换行符,然后是没有-
的变体
^&sc_Ch\d+-\d+;(?=(?:\r?\n|\r)&sc_Ch\d+;)
说明
^
字符串的开头&sc_Ch\d+-\d+;
匹配&sc_Ch
,1个以上的数字,-
和1个以上的数字(?=
积极前瞻
(?:\r?\n|\r)
匹配换行符&sc_Ch\d+;
匹配&sc_Ch
,超过1个数字,;
)
积极回望在替换中,使用完整匹配,后跟换行符和</chapter>