0

Ruby と Regex を使用して、長い文字列を文字列全体に発生するタイムスタンプで区切られたチャンクに分割しようとしています。

「10:59 am Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus at tincidunt >ante. 3:30 am Aenean interdum, quam sed tempor imperdiet, neque turpis aliquet est, at >luctus justo arcu et arcu. Sed sit amet eros a sem hendrerit vestibulum faucibus sit amet >nunc. Nam venenatis pharetra leo vel facilisis. 9:20 pm Aenean tincidunt ligula lacinia."

これが、各チャンクを引き出すために実行しているループです。

while text.length > 1
  begin_entry = text.index(/\d{1,2}[:]\d{2}\s(a|p)[.][m][.]/)
  end_entry = text.index(/\d{1,2}[:]\d{2}\s(a|p)[.][m][.]/, begin_entry + 1)
  blot = text.slice!(begin_entry, end_entry)
end

これを実行すると、エントリを開始する最初のタイムスタンプがキャプチャされます。しかし、終わりは決して正しくありません。

「10:59 am Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus at tincidunt ante.」の代わりに。「午前 10 時 59 分 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Tincidunt ante の Phasellus。午前3時30分」

そして、ループがストリングを通過するにつれて、事態はさらに悪化します。エントリの先頭は、部分文字列の先頭にタイムスタンプが含まれているため、常に正確です。しかし、終わりは決してありません。

4

1 に答える 1

0
text.split(/(\d{1,2}:\d{1,2}\s[ap]\.m\.)/).drop(1).each_slice(2).map(&:join)
于 2013-06-05T04:13:40.197 に答える