正则表达式,用于查找未注释掉的标记之间的文本

时间:2012-10-09 17:00:22

标签: .net regex expression

我有一个简单的场景似乎在困扰我。我想在两个没有注释掉的标签之间获取文本。这是一个例子:

// Example of commented text
// :Start
// <I don't want to get this text>
// :End


:Start
<Here is the text i want>
:End

解决方案:

感谢大家的帮助。超快速地收到答案,完全符合我的需要。我选择了以下正则表达式,因为它最适合我的情况。特别感谢Tim Pietzcker:

(?sm)(?<=^:Start\s*)(?:(?!^:End).)*

3 个答案:

答案 0 :(得分:2)

试试这个:

(?sm)(?<=^:Start\s*)(?:(?!^:End).)*

<强>解释

(?sm)     # Set options: . matches newline, ^ matches start-of line
(?<=      # Assert that this regex can be matched before the current position:
 ^        #  Start of line
 :Start   #  :Start
 \s*      #  Any whitespace
)         # End of lookahead
(?:       # Try to match...
 (?!      # (unless the following regex could be matched here:)
   ^      #  Start of line
   :End   #  :End
 )        #  End of lookahead
 .        # ... any character
)*        # Repeat any number of times

答案 1 :(得分:1)

我会为此而努力,似乎足够强大。还会捕获多行:

(?s)(?<=(?<!/+\s*):Start\s+)(?!//).+\s(?=:End)

(?s)乞求SingleLine选项。

答案 2 :(得分:0)

这种模式应该这样做。基本上标签必须位于行的开头,以区分真实标签和评论标签。

"\n:Start\n([^\n\/]+)\n:End"

这是Python中的一个例子。 s是您的示例文字。

r = re.search("\n:Start\n([^\n\/]+)\n:End", s)
r.group(1)
'<Here is the text i want>'

我不完全确定.NET中的语法,但是看this我想它看起来应该是这样的:

foreach (Match match in Regex.Matches(s, "\n:Start\n([^\n\/]+)\n:End"))
    Console.WriteLine("'{1}'), match.Groups[1].Value)