报告

时间:2017-03-03 18:56:34

标签: regex string vb.net

我有一份报告,我以纯文本形式提供,同事通常必须手动编辑各种标题。我知道标题的顶行和底行 - 它们在整个文档中没有区别,但是它们之间的各种文本行。 格式如下:

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

非常感谢任何帮助。

1 个答案:

答案 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