使用正则表达式

时间:2016-11-10 19:15:14

标签: c# regex

我正在尝试获取标记内的一些文本,我称之为关键字。这是一个示例[@sometext]

我无法只获得文字。我正在尝试使用它,阅读HTML,我将在我的HTML中定义一些前面解释过的sometext之类的关键字,因此我需要使用正则表达式获取sometext而不是[@sometext]。我怎么能这样做?

我正在使用的当前正则表达式是:\[@\w+\]

正则表达式将获得[@sometext]而不是sometext。我几乎尝试了一切。

非常感谢!

修改

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

3 个答案:

答案 0 :(得分:2)

请尝试这样的事情:

        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开始。

答案 1 :(得分:2)

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

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

然后你可以使用

match.Groups["Name"]

但无论你做什么,你都需要在括号中包装你想要的项目以创建捕获组

答案 2 :(得分:2)

将您的内容匹配与[的正面观察结合以及结束(?<=\[@)\w+(?=\])的正面预测结合起来,例如(?<=\[@) 。解释(由RegexBuddy提供):

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

    \[
  • 匹配字符“[”字面意思

    @

  • 字面匹配字符“@”

    \w+

  • 匹配单个字符“字符”(字母,数字等)

    (?=\])

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

    {{1}}

    • 匹配字符“]”字面意思«]»