我有一份报告,我以纯文本形式提供,同事通常必须手动编辑各种标题。我知道标题的顶行和底行 - 它们在整个文档中没有区别,但是它们之间的各种文本行。 格式如下:
BEGIN REPORT FOR CLIENT XXYYZZ
RANDOM BODY TEXT
RANDOM BODY TEXT
RANDOM BODY TEXT
RANDOM BODY TEXT
RANDOM BODY TEXT
FINAL REPORT
我正在尝试使用正则表达式在富文本框中突出显示此文本。如果我使用下面的代码,我可以突出显示顶行的每一个问题:
Dim mystring As String = "(BEGIN)(.+?)(XXYYZZ)"
Dim regHeader As New Regex(mystring)
Dim regMatch As Match = regHeader.Match(rtbMain.Text)
While regMatch.Success
rtbMain.Select(regMatch.Index, regMatch.Length)
rtbMain.SelectionColor = Color.Blue
regMatch = regMatch.NextMatch()
End While
但是,一旦我尝试更改代码以查找整个段落,它就不再突出显示任何内容。以下是我所期待的,但它不会因为任何原因而喜欢它并且不会突出显示任何内容:
Dim mystring As String = "(BEGIN REPORT FOR CLIENT XXYYZZ)(.+?)(FINAL REPORT)"
Dim regHeader As New Regex(mystring)
Dim regMatch As Match = regHeader.Match(rtbMain.Text)
While regMatch.Success
rtbMain.Select(regMatch.Index, regMatch.Length)
rtbMain.SelectionColor = Color.Blue
regMatch = regMatch.NextMatch()
End While
非常感谢任何帮助。
答案 0 :(得分:0)
您需要singleline mode,以便让.
与新行匹配。
试试这个:
Dim mystring As String = "(BEGIN REPORT FOR CLIENT XXYYZZ)(.+?)(FINAL REPORT)"
Dim regHeader As New Regex(mystring, RegexOptions.Singleline)
Dim regMatch As Match = regHeader.Match(rtbMain.Text)
While regMatch.Success
rtbMain.Select(regMatch.Index, regMatch.Length)
rtbMain.SelectionColor = Color.Blue
regMatch = regMatch.NextMatch()
End While
注意RegexOptions.Singleline
。