0

各文の途中で改行として\rタグと\nタグが返されるSRTデータがいくつかあります。テキスト/文の途中にある\rタグと\nタグのみを検索し、他の改行を示す他のタグは検索しないようにするにはどうすればよいですか。

ソースの例:

18
00:00:50,040 --> 00:00:51,890
All the women gather
at the hair salon,

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters
and they dye their hair orange.

必要な出力:

18
00:00:50,040 --> 00:00:51,890
All the women gather at the hair salon,

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters and they dye their hair orange.

私は正規表現で絶対にがらくたですが、私の最善の推測(役に立たない)は次のようなものでした

var reg = / [\ d \ r] [a-zA-z0-9 \ s +] + [\ r] /

次に、その上でsplit()を実行して、値の1つの途中にある\rを削除します。私はそれが正しい方法にさえ近くないことを確信しているので...stackoverflow!! :)

4

2 に答える 2

1

この正規表現はトリックを行う必要があります:

/(\d+\r\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\r)([^\r]+)\r([^\r]+)(\r|$)/g

これをより多くの行で機能させるには(セット数でなければなりません)、さらに を追加するだけ([^\r]+)\rです。$(また、マッチ置換に 's を追加することを忘れないでください(3 行で): '$1$2 $3 $4\r')。

使用法

mystring = mystring.replace(/(\d+\r\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\r)([^\r]+)\r([^\r]+)(\r|$)/g, '$1$2 $3\r');

制限事項

  • 2 行以上のテキストがある場合、これは機能しません。

例 1

正常に動作します!

入力:

18
00:00:50,040 --> 00:00:51,890
All the women gather
at the hair salon,

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters
and they dye their hair orange.

出力:

18
00:00:50,040 --> 00:00:51,890
All the women gather at the hair salon,

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters and they dye their hair orange

例 2

機能しません。2行以上

入力:

18
00:00:50,040 --> 00:00:51,890
All the women gather
at the hair salon,
and they just talk

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters
and they dye their hair orange.
Except for Maria who dyes it pink.

出力:

18
00:00:50,040 --> 00:00:51,890
All the women gather at the hair salon,
and they just talk

19
00:00:52,080 --> 00:00:56,210
all the mothers and daughters and they dye their hair orange.
Except for Maria who dyes it pink.
于 2012-10-22T21:13:44.637 に答える
1

これは、削除したい改行と一致し、その前後の文字をキャプチャして、スペースの周りにそれらの 2 つを元の位置に戻します。

var regex = /([a-z,.;:'"])(?:\r\n?|\n)([a-z])/gi;
str = str.replace(regex, '$1 $2');

正規表現に関するいくつかのこと。修飾子iとを使用gして、大文字と小文字を区別せず、最初の改行の後で停止するのではなく、文字列内のすべての改行を検索しました。また、文字、コンマ、ピリオド、セミコロン、コロン、一重引用符または二重引用符の、および別の文字の前に、削除可能な改行が発生する可能性があると想定しています。上記のコメントで @nnnnnn が述べたように、これは考えられるすべての文をカバーするわけではありませんが、少なくともほとんどの句読点で詰まらないはずです。改行は単一の改行である必要がありますが、プラットフォームに依存しません\r(\nまたは\r\b)。改行の前の文字と改行の後の文字 (括弧付き) の両方をキャプチャするため、 and を使用して置換文字列でそれらにアクセスでき$1ます$2。基本的にはそれだけです。

于 2012-10-22T20:57:05.397 に答える