このようなデータがあります
john, dave, chris
rick, sam, bob
joe, milt, paul
名前を一致させるためにこの正規表現を使用しています
/(\w.+?)(\r\n|\n|,)/
これは最後の値がで終わっていないという意味最後の単語の後に突然の大部分は動作しますが、ファイルの終了\r\n
、\n
または,
それがEOFで終わります。正規表現でEOFを一致させる方法はありますか?そのため、2番目のグループに正しく配置できますか?
このようなデータがあります
john, dave, chris
rick, sam, bob
joe, milt, paul
名前を一致させるためにこの正規表現を使用しています
/(\w.+?)(\r\n|\n|,)/
これは最後の値がで終わっていないという意味最後の単語の後に突然の大部分は動作しますが、ファイルの終了\r\n
、\n
または,
それがEOFで終わります。正規表現でEOFを一致させる方法はありますか?そのため、2番目のグループに正しく配置できますか?
回答:
この質問への答えは\Z
、それを理解するのにしばらくかかりましたが、現在は機能しています。逆に、音符\A
(とは対照的に、全体の文字列の先頭一致する^
と$
1つのラインの先頭に一致します)。
(\s*)\?>(\s*)\Z
(\s*)\?>(\s*)(\n*)(\W)\Z
\A
また、検索と置換のVisual Studioで動作します。いつものようにそのようなことを慎重に使用してください、しかしそれが私が実際に正しいことをしたと思って満足したら、私に手間をかける多くの手間を省きました。
Scanner
クラスを使用してファイル全体を一度に読み取りますが、\Z
区切り文字として使用すると、末尾の改行文字が削除されます。区切り文字をに変更すると\z
、末尾の改行文字が保持されました。と思われるマーティンDoreyの答えはまた、Javaに適用されます。
Visual Studioでは、次のようにEOFを見つけることができます$(?![\r\n])
。これは、行末がCR、CRLF、またはLFのいずれであっても機能します。
おまけとして、すべてのコードファイルに次のような最終改行マーカーを含めることができます。
Find What: (?<![\r\n])$(?![\r\n])
Replace With: \r\n
Use Regular Expressions: checked
Look at these file types: *.cs, *.cshtml, *.js
仕組み:
CRまたはLFで始まらず、CRまたはLFも後に続かない行端(ゼロ幅一致)を見つけます。これがなぜ機能するのか、いくつかの考えがあなたに示されます!
CR、LF、またはCRLFであっても、目的の行終了文字に置き換える必要があることに注意してください。
ライアンが提案した\ Zの動作を\ zと比較してください。
$ perl -we 'my $ corpus = "hello \ n"; $ corpus =〜s / \ Z / world / g; print( ":$ corpus:\ n") ' :こんにちは世界 世界: $ perl -we 'my $ corpus = "hello \ n"; $ corpus =〜s / \ z / world / g; print( ":$ corpus:\ n") ' :こんにちは 世界: ドル
perlre sez:
\ Z文字列の最後、または末尾の改行の前でのみ一致 \ z文字列の最後でのみ一致
テストケースのRuby(1.8.7、1.9.2)への変換は同じように動作します。
最近、私はこのようなものを探していましたが、JavaScriptを探していました。
これをここに置くと、同じ問題を持つ誰もが利益を得ることができます
var matchEndOfInput = /$(?![\r\n])/gm;
基本的に、これは行末と一致し、その後に改行文字や改行文字は続きません。本質的にこれは\Z
JavaScript と同じです。