RegEx获得具有特殊字符的单词

时间:2016-05-19 08:59:59

标签: c# regex

我想在以_(下划线)开头的字符串中找到单词。

这很容易

我写了这个小测试程序:

class Program
{
    private static Regex WordExpression = new Regex(@"_\w+");
    private static string TranslateWord(Match word) => word?.Value?.Replace("_", "");
    private static string Translate(string word)
    {
        return WordExpression.Replace(word, TranslateWord);
    }

    static void Main(string[] args)
    {
        Console.WriteLine(Translate("Do you want to _Exit the _Program"));
        Console.ReadKey();
    }
}

而且效果非常好。当我的单词之间没有空格时,问题就开始了:

Console.WriteLine(Translate("_Exit_Program"));

我的表达式只找到一个匹配_Exit_Program,但我非常想要两个匹配。这可以用正则表达式完成,还是我需要在TranslateWord方法中执行拆分字符串?

1 个答案:

答案 0 :(得分:5)

您可以使用以下正则表达式:

@"_[^\W_]+"

[^\W_]否定字符类将匹配非单词字符以外的任何字符(因此,它将匹配所有\w s) _

请参阅regex demo

更多.NET-ish正则表达式将是character class subtraction的表达式:

_[\w-[_]]+

请参阅another demo

此处,对于[\w-[_]],我们匹配所有\w,但_除外。

如果您需要更便携的解决方案,请使用第一个建议;如果您只打算在.NET环境中使用正则表达式,请使用第二个建议。