使用Regex在标签中获取文本

本文关键字:获取 取文本 标签 Regex 使用 | 更新日期: 2023-09-27 18:17:16

我试图得到一些文本,这是一个标签内,我称之为关键字。这是一个示例[@sometext]

我不能得到只有文本。我正试图使用这个,阅读HTML,我将在我的HTML中定义一些关键字,如sometext之前解释过的,所以我需要得到sometext,而不是[@sometext]使用正则表达式。我该怎么做呢?

当前我使用的正则表达式是这个:'[@'w+'] .

该正则表达式将得到[@sometext]而不是sometext。我几乎什么都试过了。

非常感谢!


编辑

解决方案是使用(?<='[@)'w+(?=']),因为我使用Matches而不是Match方法。

使用Regex在标签中获取文本

将您对内容的匹配与[@的积极向后看和关闭[(如(?<='[@)'w+(?=']))的积极向前看结合起来。解释(由RegexBuddy提供):

  • 断言下面的正则表达式可以匹配,匹配在此位置结束(正向向后看)

    (?<='[@)
    
  • 匹配字符"["

    '[

  • 匹配字符"@"

    @

  • 匹配一个"单词字符"(字母、数字等)

    'w+

    • 在一次到无限次之间,尽可能多的次数,根据需要回馈(贪婪)
  • 断言下面的正则表达式可以匹配,从这个位置开始(正向前看)

    (?='])

    • 匹配字符"]"字面意思«]»

如果您想使用命名组,请将正则表达式更改为

'[@(?<Name>'w+)']

则可以使用

match.Groups["Name"]

但是无论你做什么,你都需要将你正在寻找的项目括在圆括号中以创建捕获组

请尝试这样做:

        string html = @"<html>[@sometext]</html>";
        var regex = new Regex(@"'[@('w+)']");
        var match = regex.Match(html);
        Console.WriteLine(match.Groups[1]);
        Console.ReadKey();

关键是要使用Group。第0组是整个匹配,这里我们需要从索引1开始。