我想操縱SRT字幕文件。該文件的開始的示例串@data
:Ruby正則表達式忽略第一個有效的(?)匹配
1
00:01:09,611 --> 00:01:12,404
In co-production with
2
00:01:14,783 --> 00:01:17,034
presents
我用正則表達式的所有id
的匹配:
@data.scan(/^\d+\w*$/)
然而,這忽略了第一1
,只有輸出2..900
。我以爲我錯過了在正則表達式的一些字符,並分析@data
:
puts @data[0,10].inspect => "1\n00:01:09,611 --> "
我不明白爲什麼這首1
不匹配。與@data.match()
一起運行它不會產生1
,但會產生2
。
然後我在1
之前加了一個\n
,它就起作用了。但是,我不明白爲什麼^
需要一個\n
而不是真正的字符串開頭。
似乎在字符串中的'1'之前有一些奇怪的字符。試試'p @data [0,10] .bytes'。第一個不是49. – Dogbert 2013-04-21 15:12:40
明白了,字符串中的第一個字符似乎是UTF-8的Byte順序標記 - http://en.wikipedia.org/wiki/Byte_order_mark – Dogbert 2013-04-21 15:13:58
'@ data.scan (/^\ d + \ w * $ /)在我的環境中給我'[「1」,「2」]'。 – sawa 2013-04-21 15:15:12