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

Jen*_*olt 2 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Console.WriteLine(Translate("_Exit_Program"));
Run Code Online (Sandbox Code Playgroud)

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

Wik*_*żew 5

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

@"_[^\W_]+"
Run Code Online (Sandbox Code Playgroud)

[^\W_]否定字符类将匹配比非单词字符(这样,它会匹配所有其它任何字符\wS)除了 _.

请参阅正则表达式演示

更多的.NET-ish正则表达式将是一个带有字符类减法的表达式:

_[\w-[_]]+
Run Code Online (Sandbox Code Playgroud)

另一个演示

在这里,[\w-[_]]我们匹配除\ws之外的所有s _.

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