我想在以_(下划线)开头的字符串中找到单词。
这很容易
我写了这个小测试程序:
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方法中执行拆分字符串?
答案 0 :(得分:5)
您可以使用以下正则表达式:
@"_[^\W_]+"
[^\W_]
否定字符类将匹配非单词字符以外的任何字符(因此,它将匹配所有\w
s)除 _
请参阅regex demo
更多.NET-ish正则表达式将是character class subtraction的表达式:
_[\w-[_]]+
请参阅another demo
此处,对于[\w-[_]]
,我们匹配所有\w
,但_
除外。
如果您需要更便携的解决方案,请使用第一个建议;如果您只打算在.NET环境中使用正则表达式,请使用第二个建议。