Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 正则表达式,用于查找未注释掉的标记之间的文本_.net_Regex_Expression - Fatal编程技术网

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

.net 正则表达式,用于查找未注释掉的标记之间的文本,.net,regex,expression,.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 //注释文本的示例 //:开始 //这个模式应该可以。基本上,标记必须位于行的开头,这将真正的标记与注释的标记区分开来 "\n:Star

我有一个简单的场景似乎让我感到困惑。我想得到两个没有注释掉的标签之间的文本。以下是一个例子:

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


:Start
<Here is the text i want>
:End
//注释文本的示例
//:开始

//这个模式应该可以。基本上,标记必须位于行的开头,这将真正的标记与注释的标记区分开来

"\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>'
试试这个:

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

(?sm)(?我会选择这个,似乎足够健壮。还可以捕获多行:

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

(?s)在begging for SingleLine选项处。

您使用的是哪个正则表达式引擎?这是相关信息,因为显而易见的解决方案需要并非所有正则表达式引擎都具有的功能。此外,这是仅有的两种可能情况,还是(在两个标记之间)可能存在例如,有些行被注释掉了,有些行没有被注释掉?我使用的是.Net.UPDATE附带的正则表达式引擎:我需要在:Start和:End标记之间的任何可能被注释掉的行上都不匹配。好主意。我尝试了您的解决方案,但无法使其工作。请给我一点时间来使用它一点,我会看看我是否能让它工作。不幸的是,我使用的自动化工具在某种程度上限制了我使用正则表达式的能力。虽然该工具的背面是.Net,但类似于上面的东西应该可以工作,我想…谢谢你的帮助和示例。我之所以不能使用正则表达式,只是因为我使用的自动化工具确实允许编程实现。谢谢,谢谢!这个解决方案很容易理解,正是我想要的。效果很好。因为我是一个“聪明的驴”:您的正则表达式也将匹配:
:Start\EOL//\EOL:End\EOL
,其中
\EOL
表示行尾。仍然+1表示非常好的解决方案!您是否建议需要修改“alfasin”?@alfasin:这就是为什么我问是否需要考虑类似的行,OP说不需要的原因。@ThePracticalSyde:这是不可能的在单个正则表达式中完成,至少如果您希望每个开始/结束段都是一个完整的匹配项,则不需要这样做。通过两个步骤可以更轻松地完成此操作:首先在未注释的开始/结束标记之间进行匹配,然后获取结果并删除任何注释行。此解决方案也适用于我,但它会返回空行和带文本的行的匹配项。它可以这不仅仅是我的自动化工具使用正则表达式的方式。谢谢你的帮助!
(?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
(?s)(?<=(?<!/+\s*):Start\s+)(?!//).+\s(?=:End)