マークから行末まですべてのRegexがキャプチャしますか?


122

単一ので注釈を示すテキストファイルがあります'

一部の行には2つの引用符がありますが、a 'とラインフィードの最初のインスタンスからすべてを取得する必要があります。

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418

回答:



90

適切な正規表現は、 '文字の後に任意の数の文字(ゼロ文字を含む)が続き、文字列/行トークンの終わりで終わります。

'.*$

また、 'charののすべてをキャプチャしたいが、出力には含めない場合は、以下を使用します。

(?<=').*$

これは基本的に、行の終わりまで 'charに続くすべての文字を私に与えると言います。

編集:。*を使用する場合、$は暗黙的であるため、厳密には必須ではないため、パターンは次のとおりです。

'.* 

技術的には正しいですが、具体的に指定し、後のコードメンテナンスの混乱を避けるため、$を使用しています。明確性が疑われる状況では、暗黙の動作に依存するよりも、明示的な動作を宣言する方が常に良いと私は信じています。


1
$は不要です。通常の状況では、ドットは行の終わりで停止します。
トマラック2009年

7
不要-しかし、彼がやりたいことには適切です。それは後で 'から行の終わりまですべてを期待していることを思い出させる働きをします
gnarf 2009年

@balabaster:間違っているとは言わなかった。;-)単なる脚注でした。
Tomalak、2009年

@Tomalak:どうしてもあなたが間違っていることを暗示するつもりはありませんでした。そうではなく、$を使用するという私の選択の理由を明らかにしただけです。ご指摘ありがとうございます。
BenAlabaster、2009年

常に含めるのではなく、問題のキャラクターの後にすべてを含める方法を含めるための+1。
-grizzasd

22
'.*$

一重引用符(')で始まり、任意の文字(.)に0回以上(*)、行末()まで一致します$


この回答は、コマンドの背後にあるロジックを分解する方法の良い例です。
Timmah

12

Windows(メモ帳++)で '。*を試したところ、最初の行から最後の行の終わりまですべてに一致しました。

その行の終わりまですべてをキャプチャするには、次のように入力しました。

'.*?\n

これは 'からその行の終わりまですべてをキャプチャするだけです。


6

あなたの例では、私は次のパターンに行きます:

'([^\n]+)$

複数行およびグローバルオプションを使用して、すべての出現に一致させます。

一致にラインフィードを含めるには、次のように使用できます。

'[^\n]+\n

しかし、改行がない場合、これは最後の行を見逃す可能性があります。

1行の場合、使用したい改行を一致させる必要がない場合:

'[^$]+$

4

これにより、 'までの後方参照1まで、および'の後のすべてが後方参照2までキャプチャされます。言語(\ ')によっては、アポストロフィをエスケープする必要がある場合があります。

/^([^']*)'?(.*)$/

簡単な変更:行に 'がない場合-バックリファレンス1は行全体をキャッチします。

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

0

https://regex101.com/r/Jjc2xR/1

/(\w*\(Hex\): w*)(.*?)(?= |$)/gm

私はこれがうまくいくと確信している

     Space Reservation: disabled
         Serial Number: wCVt1]IlvQWv
   Serial Number (Hex): 77435674315d496c76515776
               Comment: new comment

私は正規表現の永遠の初心者ですが、これを説明してみます

(\ w *(Hex):w *):文字列に "Hex:"を含む行のテキストを検索します

(。*?)これは2番目にキャプチャされたテキストで、その後のすべてを意味します

(?= | $)=と|の間のスペースである制限を作成します

したがって、2番目のグループでは、値は


それは問題ではありません、そうですか?
ダニエルE.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.