2016-12-25 3 views
0

私は、次の見出しに沿って複数行(潜在的にマークダウン)のテキストを分割する正規表現はありますか?

#####1 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

#####2 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

#####3 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

#####I 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

#####II 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

(末尾の空行がSOどう思うかにもかかわらず、あります)のような複数行のテキストを持っています。私は見出しのテキストを保持し、それを見出しのテキストをキーとして使用して呼び出す(それは一意です)、見出しのテキストを保持し、辞書/ハッシュテーブル/連想配列/全体に配置する必要があります。

私は線を通って反復しようとしましたが、私の脳はあまりにもこの権利を得るために揚げられました - 私はそれぞれのテキストを先にシフトしました。見出し1は空になり、見出しIIはI.

を見出し、私は正規表現でこれを行う可能性が考えていたので、私はこのようにそれだけで奇妙な見出しをキャプチャし、明らかに「次」#をキャプチャし、この

#####(.+)\n([\w\W\n]+?)# 

を思い付きました。

アイデア? (私は言語にとらわれないので、好きなものに自由に答えてください)。

+0

'#####(。*)\ r?\ n([^#] *(?:#{4})[^#] *)*)'または '##彼らが両方ともrubularで動作するように見えることは興味深いです。#(#* 5))*)*) ' –

+0

私のRubyスクリプトでは 'String#scan'という文字列ではありません... – Morpheu5

答えて

0

OK、それは恥ずかしがらず簡単でした。結局のところ、#####で分割することは完全に容認できました。

articles = text.split('#####').map do |e| 
    a = e.split("\n") 
    [a[0], a[1..-1]] 
end[1..-1].map do |e| 
    ["art-#{e[0]}", e[1]] 
end.to_h 
+1

代わりに"^##### "を分割することもできます。 –

+0

私の場合は非常に高いチャンスではありませんが、良い点:) – Morpheu5

+0

セグメント化されるすべてのテキストを含む1つの長い文字列を取ると面白いと面白いです... – Morpheu5

2

メモリ使用量を減らすべき、VB.NETでのようにライン・バイ・ラインを解析するあなたは、任意の言語は、言った:

Option Infer On 
Option Strict On 

Imports System.IO 
Imports System.Text 

Module Module1 

    Public Function GetParsedSections(s As String) As Dictionary(Of String, String) 
     Dim sections As New Dictionary(Of String, String) 
     ' a MemoryStream suffices here to emulate reading from a file as a stream... 
     Using ms As New MemoryStream(Encoding.UTF8.GetBytes(s)) 
      Dim currentSectionName = "" 
      Using sr As New StreamReader(ms) 
       While Not sr.EndOfStream 
        Dim thisLine = sr.ReadLine() 
        If thisLine.StartsWith("#####") Then 
         ' we have a heading: update currentSectionName 
         currentSectionName = thisLine.Substring(5) 
        Else 
         ' avoid sections with no heading, i.e. preamble: 
         If currentSectionName <> "" Then 
          If sections.ContainsKey(currentSectionName) Then 
           ' note: VbCrLf represents the character sequence CRLF 
           ' add a line to the appropriate dictionary item 
           sections(currentSectionName) &= thisLine & vbCrLf 
          Else 
           ' create a new dictionary entry with the content of the current line 
           sections.Add(currentSectionName, thisLine & vbCrLf) 
          End If 
         End If 
        End If 
       End While 
      End Using 
     End Using 

     Return sections 

    End Function 

    Sub Main() 
     Dim s = "#####1 
Lo venas término que ilesa bajo abeja poniendo las tierra queman pero los los se huye entonces por muerte escaleras. 

#####2 

Y bajo abierta los vacía tu la me lenta talco consume quedo tierra sillas subía escaleras loca de bala mi. 

Manteles y es ilesa de poniendo atrás llanura los un baja pero repartiendo los tierra venas la criaturas vacía el. 

Desnudo todo quedo se los come ceniza muertos por que duro para desnuda hombrecillo aire los es los quedo bajo. 

#####3 
Por nino recientes arroyo quedo muelles quedo en me tu las la sillas cielo las ojos lo desnudo musgos el. 

El desnudo nino los del de los luna con es vengo abrir de poniendo con fría come lentejas sillas es. 

#####I 
A dolor algodón buscando de de faraón apariencia cielo me los es la nino oh pasan mujer llanura de por. 

Encuentro sensitivo quemadas paso los quedo musgos borrachos de recientes bajaba abierta imperturbable que al con es de y se. 

#####II 
Los baja comida de lenguas lenta que que y abrir quedo ballenas lo brooklyn bajaba tierra de escobazos se me. 

#####1 
Some more text for heading 1. 

" 

     Dim topics = GetParsedSections(s) 

     For Each topic In topics.Keys 
      Console.WriteLine("Heading: " & topic) 
      Console.WriteLine(topics(topic)) 
     Next 

     Console.ReadLine() 

    End Sub 

End Module 

出力:することができます

Heading: 1 
Lo venas término que ilesa bajo abeja poniendo las tierra queman pero los los se huye entonces por muerte escaleras. 

Some more text for heading 1. 


Heading: 2 

Y bajo abierta los vacía tu la me lenta talco consume quedo tierra sillas subía escaleras loca de bala mi. 

Manteles y es ilesa de poniendo atrás llanura los un baja pero repartiendo los tierra venas la criaturas vacía el. 

Desnudo todo quedo se los come ceniza muertos por que duro para desnuda hombrecillo aire los es los quedo bajo. 


Heading: 3 
Por nino recientes arroyo quedo muelles quedo en me tu las la sillas cielo las ojos lo desnudo musgos el. 

El desnudo nino los del de los luna con es vengo abrir de poniendo con fría come lentejas sillas es. 


Heading: I 
A dolor algodón buscando de de faraón apariencia cielo me los es la nino oh pasan mujer llanura de por. 

Encuentro sensitivo quemadas paso los quedo musgos borrachos de recientes bajaba abierta imperturbable que al con es de y se. 


Heading: II 
Los baja comida de lenguas lenta que que y abrir quedo ballenas lo brooklyn bajaba tierra de escobazos se me. 

後でセクションの内容に追加します。

+0

私は最初にそのようなことをしようとしていましたしかし、私の脳は正常に機能していないと私は最初の要素を台無しにし続けた:) – Morpheu5

関連する問題