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

本文关键字:正则表达式 模式 问题 | 更新日期: 2023-09-27 18:09:46

我发现为自己找出确切的正则表达式有点困难。我有一个文本,我必须搜索一个特定的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>

谁能建议我怎么写正则表达式?

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

你能想到的最简单的方法是:

<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知识(或美国大学术语中的Regex 101)。如果您需要问这样的问题,也许您应该重新考虑是否真的需要正则表达式。正如Jamie Zawinski曾经说过的:

有些人在遇到问题时,会思考"我知道,我会用正则表达式。"
现在他们有两个问题。