2016-05-19 17 views
2

_(アンダースコア)で始まる文字列内の単語を検索したい。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を見つけたが、私は非常に多くの2試合たいと思います。これは正規表現で行うことができますか、またはTranslateWordメソッドで分割文字列を行う必要がありますか?あなたは、次の正規表現を使用することができます

答えて

5

@"_[^\W_]+" 

[^\W_]否定文字クラスは(そう、それはすべての\w秒と一致します)_以外の非単語の文字以外の任意の文字と一致します。

より.NETっぽい正規表現はcharacter class subtractionと表現されますregex demo

参照してください:

_[\w-[_]]+ 

[\w-[_]]で、我々がすべて\w Sと一致し、ここでanother demo

を参照してください。 _の例外です。

より移植性の高いソリューションが必要な場合は最初の提案を、.NET環境でのみ正規表現を使用する場合は2番目の提案を使用してください。

関連する問題