2016-02-18 9 views
5

私は行の最後に停止する正規表現に苦労しています。Regex:行の末尾に一致しない

入力は次のようになります。

How text spacing looks in Notepad++

一部の行は、コロンの後に(任意の文字を含んでいてもよい)の値を持っている、いくつかはしないでください。コロンの両側にスペースがある場合があります。行2及び4次の作業のため

(すなわち、それぞれ一致1216):

Pink\s*:\s*(.*)\n 
Red\s*:\s*(.*)\n 

しかし、ライン3(一致する値がない場合)、上記の構文を使用して正規表現16を返しますすなわち、行末を超えて読み込みます。

誰でも私が間違っていることを示唆することはできますか?私はVBAを使用しています。

+0

例では16より前に余分なコロンがあることに気がついたので、実際には16が返されますが、それは質問には関係ありません。 – QAer

+0

'\ s'を' [\ t] 'に置き換える必要があります。または '[^ \ S \ r \ n]'で。 –

答えて

3

問題は、\sの短縮形の文字クラスが、縦と横の両方の空白に一致することです。つまり、スペースと改行シーケンスの両方に一致します。

したがって、水平空白にのみ一致するように制限する必要があります。

\s[ \t]または[^\S\r\n\v]に置き換える必要があります。

+2

素晴らしい説明と解決策をお寄せいただきありがとうございます。 – QAer

関連する問題