在C#中找到精确正则表达式模式的问题

时间:2011-09-24 12:26:50

标签: c# regex

我发现很难为自己搞清楚正确的正则表达式。 我有一个文本,我必须搜索特定的HTML标签。标签就像

<snippet lang="java">some java code</snippet>

我的文字就像是

This is a sample text where <snippet lang="java">some java code</snippet> and other sample text where this that <snippet lang="java">some java code 2</snippet>

任何人都可以建议我如何为此编写正则表达式?

1 个答案:

答案 0 :(得分:2)

你能想出的最微不足道的是:

<snippet lang="java">.*?</snippet>

您可能想要捕获组中这些标记之间包含的内容:

<snippet lang="java">(.*?)</snippet>

甚至可以制作java部分变量:

<snippet lang="([^"]+)">(.*?)</snippet>

快速PowerShell测试:

PS> $text = 'This is a sample text where <snippet lang="java">some java code</snippet> and other sample text where this that <snippet lang="java">some java code 2</snippet>'

PS> [Regex]::Matches($text, '<snippet lang="([^"]+)">(.*?)</snippet>')


Groups   : {<snippet lang="java">some java code</snippet>, java, some java code}
Success  : True
Captures : {<snippet lang="java">some java code</snippet>}
Index    : 28
Length   : 45
Value    : <snippet lang="java">some java code</snippet>

Groups   : {<snippet lang="java">some java code 2</snippet>, java, some java code 2}
Success  : True
Captures : {<snippet lang="java">some java code 2</snippet>}
Index    : 112
Length   : 47
Value    : <snippet lang="java">some java code 2</snippet>

请注意,这是所有非常基本的正则表达式知识(或美国大学的Regex 101(大学?)用语)。如果您需要提出这样的问题,也许您应该重新考虑是否确实需要正则表达式。正如Jamie Zawinski曾经指出的那样:

  

有些人在面对问题时会思考   “我知道,我会使用正则表达式。”   现在他们有两个问题。