2009-05-06 1 views
60

私は、備考を表すテキストファイルが1つの'で表示されています。Regexは「マークからラインの終わりまでのすべてをキャプチャするでしょうか?

一部の行には2つの引用符がありますが、最初は'と改行のすべてを取得する必要があります。

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 

答えて

68
'.* 

私はあなたにオプションMultilineが必要と考えます。これは、にすべてをキャプチャします

61

適切な正規表現は、文字列/行トークンの終わりで終わる[ゼロ文字を含む]任意の文字のいずれかの数字が続く "文字のようになります。

'.*$ 

そして、あなたがキャプチャしたい場合すべてが出力に含める「文字後ではなく、あなたが使用します。

(?<=').*$ 

をこれは基本的に私をfoすべての文字を与えると言いますラインの終わりまで 'char'をllowします。

編集:。それは、*使用しているとき$は暗黙的であることに注目し、そのため厳密には必要ありませんされていますので、パターン:

'.* 

は、しかし、具体的かつ避けるために明確である、技術的に正しいです後のコードのメンテナンスのための混乱、したがって$の私の使用。明快さが疑問視される状況では暗黙の行動に頼るよりも明示的な行動を宣言する方が常に良いと私は信じています。単一引用符(')を皮切り

+1

$は不要です。通常の状況下では、ドットは行末で停止します。 – Tomalak

+7

は不要ですが、彼がしたいことには適切です。それは、後ですべての行の終わりまでを期待していることを思い出させるためのものです。 – gnarf

+0

@balabaster:それは間違っているとは言いませんでした。 ;-)それはちょうど脚注だった。 – Tomalak

15
'.*$ 

、ライン($)の終わりまで、任意の文字(.)0回以上(*)と一致します。

+0

私はあなたの簡潔な説明が好きです。ありがとう! – EdwardM

2

- 後方参照2にあなたが言語(\ ')にもよるがアポストロフィをエスケープする必要があるかもしれません「後方参照1内の後、すべて」

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

クイック修正:その行に ' - 後方参照'がない場合は、1行全体を引き継ぐ必要があります。

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

「*。windows(Notepad ++)で試してみたら、最初の後にすべて一致します」と最後の行の最後まで。

'.*?\n 

これはのみ、その行の終わりまで」からすべてのものをキャプチャします:私は次のように入力されたその行の終わりまですべてを捕獲するために

。あなたの例では

2

私は、次のパターンのために行くだろう:

'([^\n]+)$ 

使用の複数行とグローバルオプションはすべての出現箇所を一致させます。

あなたが使用できる試合で改行含めるには:

'[^\n]+\n 

しかし、それは何の改行を持っていない場合は、これが最後の行を逃すかもしれませんが。あなたは改行と一致する必要がない場合

一行のために、私が使用することを好むだろう:

'[^$]+$ 
関連する問題