Regex 在整位数和节位数实体之间拆分字符串
我有一个包含实体的文件。如果有一个完整的数字实体后跟一个分段的数字实体,我需要在它们之间放置一个Regex 在整位数和节位数实体之间拆分字符串,regex,string,vb.net,replace,split,Regex,String,Vb.net,Replace,Split,我有一个包含实体的文件。如果有一个完整的数字实体后跟一个分段的数字实体,我需要在它们之间放置一个结束元素 我试着把它放到一个数组中。我尝试使用正则表达式: /&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
结束元素
我试着把它放到一个数组中。我尝试使用正则表达式:
/&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;
&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_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)
Dim chapters As List(Of String)=File.ReadAllLines(“[File Path]”)。ToList()
以布尔值表示的值=真
对于整型行=章节。计数-1到0步骤-1
如果章节(第行).包含(“-”c),则
如果没有第章,则插入第章(第+1行“”)
notache=假
其他的
notachage=正确
如果结束
下一个
'请随意命名文件
File.writeAllines(“chapters_new.txt”,chapters)
一个未经检验的理论(我没时间了,不得不走了),在纸上看起来不错,可能会激发一个想法
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
对于i作为整数=0到8
将文本设置为字符串=“&sc\u 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(“,yourText.LastIndexOf(str)+2)
下一个
您可以将变体与-
匹配,并利用正向前瞻来断言右侧的内容是一个换行符,后跟不带-
的变体
^&sc_Ch\d+-\d+;(?=(?:\r?\n|\r)&sc_Ch\d+;)
解释
字符串的开头^
&sc_Ch\d+-\d+代码>匹配
,1+位,&sc\u Ch
和1+位-
正向前瞻(?=
匹配换行符(?:\r?\n |\r)
匹配&sc_Ch\d+;
,1+位,&sc_Ch
关闭正向前瞻)
|So,
&sc\u Ch2代码>,&sc_Ch5代码>和&sc_Ch8代码>不是章节。仅当字符串包含连字符且以下内容不包含连字符时,它才是章节。所以,这里有一个连字符,开始一个章节,没有连字符,这是一个章节,插入。是的,它们已经包含在里面了。最后一节需要增加最后一章。鉴于你之前提出的问题,实际结构似乎比这更复杂。这是您需要修改的字符串的真实序列吗?是的,这正是需要更改的文档。请使用Dim strMasterDoc=file.ReadAllText(existingMasterFilePath)读取文件。这对于字符串的章节列表是否合适。它不接受它不。使用Dim trMasterDoc作为列表(字符串)=File.ReadAllLines(existingMasterFilePath.ToList()
。如果各章如你在问题中所示以不同的行分开。当然,trMasterDoc
在这段代码中被称为chapters
。我如何将文件重新组合在一起,以便其他代码可以在其上运行?我将Dim strMasterDoc=File.ReadAllText(existingMasterFilePath)Dim newMasterFileBuilder设置为用于操作文本的新StringBuilder(strMasterDoc)。因此,我需要您的代码输出strMasterDoc,使其与我剩余的代码一起工作。请参阅编辑和前面的注释(无File.ReadAllText()
,但File.ReadAllLines()
,然后File.writeAllines()
保存)。好的,我理解并将测试它。谢谢你的帮助。你的文字总是会改变,所以我认为这行不通。是的,你需要给坐在我车里看这个的一条新的线写信。我认为,如果你在类范围内声明了你的文本,这将起作用。