2017-09-21 9 views
2

私は、次の文字列を持っている:正規表現。単一の文字列で2つの固有の単語の間の単語(複数可)を見つける

私は一時的なパスワードをつかむ( NvSYVZeg部)とにそれを入れて何をしたいのか
Account has been reset and assigned the following temporary password: 

NvSYVZeg 

Please log into your account using your email address and the temporary password. 

それは独自の文字列変数です。私は何時間も探して、オンラインで見つけた複数の表現を試しました(RegexStorm.com & RegExr.comでテストしました)、一時パスワードを決して見つけられないようです。

(?<=password:\s)(.*?)(?=\sPlease) 

(password:)(.*?)(Please) 

をしかしそれらのどちらも私の仕事:私は試してみました。何か案は?

答えて

2

パスワードと先頭/末尾の区切り文字の間に空白が2つ以上あります。したがって、あなたは\s*(任意の0 以上空白記号)を使用する必要があります。

password:\s*(.*?)\s*Please 
     ^^^  ^^^ 

または

(?<=password:\s*).*?(?=\s*Please) 
      ^^^  ^^^ 

regex demoを参照してください。

2番目の1、ちょうどアクセスm.Valueを使用している場合は最初のものが

var m = Regex.Match(s, @"password:\s*(.*?)\s*Please"); 
if (m.Success) 
{ 
    Console.WriteLine(m.Groups[1].Value); 
} 

のように使用される可能性があります。

+0

これは私のために働いたものです、ありがとう!そして、明確化が必要な人にとっては、3番目のコードブロックの 's'は正規表現を実行したい文字列である必要があります。 var mも中括弧で囲まれていますが、Replace()メソッドを使用してそれらを削除しました。 – Tscott

0

正規表現オプションRightToLeftを使用することで、私の心の中でパターンを作るのが簡単になるフォワードの代わりに後方に働くようパーサーに指示します。 パーサは逆に動作しますが、私たちのパターンは通常どおり通常の方法で表されます。


私たちは精神的に、私たちのパターンで、アンカー^Passwordから逆方向に作業する場合、我々は単に\s+を指定することにより、すべてのスペースを食べなければなりません。空白がすべて消えたら、改行まですべてを取り出すだけです。パターンはその後という名前のグループmyMatch.Groups["Password"].valueを使用してC#での実際のパスワードを抽出

(?<Password>[^\r\n]+)\s+^Please 

だろう。

パターンに^があることに注意してください。また、オプションMultilineも必要です。

関連する問題