具有多个字符分隔符的文本的正则表达式

时间:2017-01-18 05:33:52

标签: asp.net regex vb.net

我有一个这样的文本文件:

dev1

所以文本(多行)由" ::"分隔。我想找到两者之间的比赛。也许最好的方法是替换" ::"用一个字符然后在VB.Net中使用split方法。但我想知道是否可以使用正则表达式来完成这一点,如下所示:

::content1 ...
...
::content2 ...
...
::content3 ...
...

这似乎很容易,但我无法找到正确的正则表达式。

修改 有人问我已经尝试了什么。我尝试过负面预测,但它不起作用。 (我使用[\ S \ s]代替"。",因为我理解句号与新行字符不匹配。也许这是我对正则表达式的不了解。)

Dim myRegex as RegEx = new Regex("...")         
m = myRegex.Match(content)
Do While m.Success
    ...
    m = m.NextMatch()           
Loop

2 个答案:

答案 0 :(得分:1)

请注意,::(?![\S\s]+::)[\S\s]+模式与::匹配后未跟随任何1个字符([\s\S]+),后跟::,然后匹配任何1个字符。这使得模式找到了最后的::以及之后的内容。

请注意,在这种情况下,您可能真的没有正则表达式如果 ::总是分隔内容。这是一种方法:

Dim result As String() = str.Split(New String() {"::"}, StringSplitOptions.RemoveEmptyEntries)

如果要与行的开头的::分开,可能需要使用像

这样的正则表达式
Dim result As List(Of String) = Regex.Split(str, "^::", RegexOptions.Multiline).Where(
        Function(m) String.Equals(m.Trim(), String.Empty) = False).ToList()

其中RegexOptions.Multiline会使^与行的开头匹配,而不是字符串的开头。

答案 1 :(得分:0)

无需使用正则表达式。按::分割文字。

content.Split("::")