我想在以_(下划线)开头的字符串中查找单词.
这很容易
我写了这个小测试程序:
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方法中执行拆分字符串?
您可以使用以下正则表达式:
@"_[^\W_]+"
Run Code Online (Sandbox Code Playgroud)
在[^\W_]否定字符类将匹配比非单词字符(这样,它会匹配所有其它任何字符\wS)除了 _.
请参阅正则表达式演示
更多的.NET-ish正则表达式将是一个带有字符类减法的表达式:
_[\w-[_]]+
Run Code Online (Sandbox Code Playgroud)
在这里,[\w-[_]]我们匹配除\ws之外的所有s _.
如果您需要更便携的解决方案,请使用第一个建议;如果您只打算在.NET环境中使用正则表达式,请使用第二个建议.
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |