在 c# 中使用正则表达式提取部分文本

Posted

技术标签:

【中文标题】在 c# 中使用正则表达式提取部分文本【英文标题】:Extract parts of Text using Regex in c# 【发布时间】:2012-07-22 05:23:59 【问题描述】:

在 Java 中,我可以使用 Regex 简单地提取部分代码或文本,但在 C# 中,我不确定如何做到这一点。 例如:

Pattern p = Pattern.compile("(.*?)b(.*?)d(.*?)", Pattern.DOTALL|Pattern.MULTILINE);
Matcher matcher = p.matcher("abcde");
System.out.println(matcher.group(1));   //c 

我在 C# 中找到了很多关于 Regex 的教程,但我发现没有办法做这样简单的事情。但它必须适用于各种类型和数量的文本、数字、符号等,以便我可以使用它来提取部分 html 代码。

【问题讨论】:

" so that I can use regex for example to extract parts of HTML code" @TimSchmelter 哈哈打败了我! 这个文本看起来很糟糕,我知道 Regex 不应该用于 HTML,但这只是一个示例。 【参考方案1】:

首先。您在 java 中的代码不能按原样工作。

正确代码(已测试):

Pattern p = Pattern.compile("(.*?)b(.*?)d(.*?)", Pattern.DOTALL|Pattern.MULTILINE);
Matcher matcher = p.matcher("abcde");
if (matcher.find())  // Without this test: [Exception in thread "main" java.lang.IllegalStateException: No match found]
  System.out.println(matcher.group(2));   //c     <--2 instead of 1 

在 C# 中等效(已测试):

Regex r = new Regex("(.*?)b(.*?)d(.*?)", RegexOptions.Singleline | RegexOptions.Multiline);
Match matcher = r.Match("abcde");
Console.WriteLine(matcher.Groups[2]);   //c 

【讨论】:

谢谢,这正是我想要的。我不确定这是否是从零开始的,谢谢你也解决了这个问题。 在此之上,您可以使用命名组new Regex("(?&lt;name&gt;.*?)b(?&lt;wibble&gt;.*)d(?&lt;fish&gt;.*?)"... 然后matcher.Groups["wibble"]【参考方案2】:
Regex rx = new Regex("(.*?)b(.*?)d(.*?)");
Match match = rx.Match("abcde");
string found = match.Value;

【讨论】:

我以前已经有过类似的东西,但它返回“abcd”。它返回正则表达式的最后一个匹配项,但我想要一个字段或列表,其中包含通配符所在的文本,在这种情况下,“a”表示第一个通配符,“c”表示第二个通配符,依此类推。跨度>

以上是关于在 c# 中使用正则表达式提取部分文本的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式提取html中的文本

c# 正则表达式提取()中的值

C# 正则表达式提取指定文本内的内容

C# 正则表达式提取指定文本内的内容

C# 正则表达式提取指定文本内的内容

C# 正则表达式提取指定文本内的内容