none
如何將字串的特定字串變成群組再用分隔符號分開 RRS feed

  • 問題

  • 請問:

           如何將字串的特定字串變成群組再用分隔符號分開

    如:字串"今天天氣很好" ,天氣為一個群組,
    結果為今|天|天氣|很|好
    希望分隔成這樣子,用split跟replace都沒辦法達到預期的效果

    謝謝
    2009年10月7日 上午 09:26

解答

  • Hi,

    SEE
        Sub Main()
            Dim inputString As String = "今天天氣很好"
            Dim grouCollection() As String = New String() {"天氣"}
            Console.WriteLine(GetGroupedString(inputString, grouCollection, "|"))
        End Sub
    
        Private Function GetGroupedString(ByVal inputString As String, ByVal grouCollection() As String, Optional ByVal splitChar As Char = ","c) As String
            Dim outputString = inputString
            outputString = Regex.Replace(outputString, "", splitChar).Trim(splitChar)
            For Each groupItem As String In grouCollection
                outputString = outputString.Replace(Regex.Replace(groupItem, "", splitChar).Trim(splitChar), groupItem)
            Next
            Return outputString
        End Function


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Lolota Lee 2009年10月14日 上午 05:12
    2009年10月7日 上午 10:10
  • 1. 你要有辦法將中文有轉成注音表示法。
    如果不會的話,可以參考 CodePlex 網站的 ImeLib 專案。

    2. 你要先建立你的聲母、介母、韻母以及聲調的資料群組

    3. 再來利用 2. 的規則進行分析 1. 的注音表示分析...

    先動手做做看,有問題在繼續上來問吧!


    chhuang - There's more than one way to do it.
    • 已標示為解答 Lolota Lee 2009年10月14日 上午 05:12
    2009年10月7日 下午 03:31

所有回覆

  • 雖然不是很懂你的意思........不過你可能是想找正則運算式
    http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/06/30/introduction-to-net-regular-expression.aspx
    2009年10月7日 上午 09:29
  • 也許自己做字串處理

            Dim str = "今天天氣很好"
            Dim key = "天氣"
            Dim nstr = ""
            For i = 1 To str.Length
                If Mid(str, i, Len(key)) = key Then
                    nstr += key + "|"
                    i = i + Len(key) - 1
                Else
                    nstr += Mid(str, i, 1) + "|"
                End If
            Next
            nstr = nstr.Remove(Len(nstr) - 1, 1)
            MessageBox.Show(nstr)
    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年10月7日 上午 10:09
    版主
  • Hi,

    SEE
        Sub Main()
            Dim inputString As String = "今天天氣很好"
            Dim grouCollection() As String = New String() {"天氣"}
            Console.WriteLine(GetGroupedString(inputString, grouCollection, "|"))
        End Sub
    
        Private Function GetGroupedString(ByVal inputString As String, ByVal grouCollection() As String, Optional ByVal splitChar As Char = ","c) As String
            Dim outputString = inputString
            outputString = Regex.Replace(outputString, "", splitChar).Trim(splitChar)
            For Each groupItem As String In grouCollection
                outputString = outputString.Replace(Regex.Replace(groupItem, "", splitChar).Trim(splitChar), groupItem)
            Next
            Return outputString
        End Function


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Lolota Lee 2009年10月14日 上午 05:12
    2009年10月7日 上午 10:10
  •  Dim sourcestring As String = "今天天氣真的是很好"
            Dim filterstring() As String = New String() {"天氣", "很好"}
            Dim i As Integer = 0
            Dim iIndex As Integer
            Dim iPosition As Integer = 0
            Dim TargetString As String = ""
            For i = 0 To 1
                iIndex = sourcestring.IndexOf(filterstring(i), iPosition)
                If iIndex >= 0 Then
                    For j As Integer = iPosition To iIndex - 1
                        TargetString &= sourcestring.Substring(j, 1) & ","
                    Next

                    TargetString &= filterstring(i) & ","
                End If

                iPosition = iIndex + filterstring(i).Length


            Next
            TargetString = TargetString.Remove(TargetString.Length - 1, 1)
            MessageBox.Show(TargetString)
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    2009年10月7日 上午 10:15
    版主
  •         Dim source As String = "今天天氣真的很好"
            Dim group() As String = New String() {"天氣", "很好"}

            source = Regex.Replace(source, "", "|")
            For Each s In group
                s = Regex.Replace(s, "", "|").TrimStart("|"c).TrimEnd("|"c)

                source = source.Replace(s, s.Replace("|", ""))
            Next

            MessageBox.Show(source)

    2009年10月7日 上午 10:45
  • 樓主的規則不夠明確,請明確說明。
    如果是語意分析的話,先去全國博碩論文網找一些既有的文章看看。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年10月7日 上午 11:38
  • 不好意思,我可能說的不夠清楚,我要從某字串的注音符號中,計算各注音符號出現的次數,
    而這些字串都存在資料庫中,我是先放在dataset中,如:

    「一切」這個字串,注音是:一ˊㄑ一ㄝˋ
    這樣的話 「一」出現一次
        「ˊ」出現一次
        「ㄑ」出現一次
        「一ㄝ」出現一次
        「ˋ」出現一次
    重點是 「一ㄝ」是注音符號的韻母,所以他們算是一個群組,不能分開成一跟ㄝ來計次,只能算一次
    像是「一ㄛ」、「一ㄚ」等都是韻母,所以字串遇到韻母都只能算一次,所以我才想說要將他們群組起來
    好計算我資料庫中的字串,各個注音符號出現的次數是多少,來做個統計。

    謝謝^^
    2009年10月7日 下午 02:16
  • 1. 你要有辦法將中文有轉成注音表示法。
    如果不會的話,可以參考 CodePlex 網站的 ImeLib 專案。

    2. 你要先建立你的聲母、介母、韻母以及聲調的資料群組

    3. 再來利用 2. 的規則進行分析 1. 的注音表示分析...

    先動手做做看,有問題在繼續上來問吧!


    chhuang - There's more than one way to do it.
    • 已標示為解答 Lolota Lee 2009年10月14日 上午 05:12
    2009年10月7日 下午 03:31
  • Hi,

    上面的範例轉一下就是您要的答案了

    提示:
    把GroupCollection資料群組由大到小排列
    循著要處理的字串去比對第一個可以Match的群組資料
    在該群組資料的個數+1

    若能使用sql語法能直接濾出某字開頭的群組資料
    也能順便由大到小排序

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年10月8日 上午 01:44
  • 謝謝各位我知道怎麼寫了,
    若有好的方法請大家分享一下
    2009年10月9日 上午 11:39