2012-12-04 35 views
0

我想提出這幾樣串的單線數字在列表中的名稱SingleLineNrs:如何將該字符串的數字放入數據庫中?

\%(\%>1l.\%<4l\|\%>5l.\%<7l\|\%>9l.\%<15l\|\|\%>15l.\%<17l\|\%>17l.\%<19l\|\%>24l.\%<29l\|\%>31l.\%<33l\|\%>33l.\%<35l\)

SingleLineNrs必須[2,3,6,10,11,12,13,14,16,18,25,26,27,28,32,34]

但我不知道如何分割這些因爲><的標誌。
問題是我需要><之間的數字,而不是字符串self中的數字。

>(\d+)\D+(\d+) 

它有兩個拍攝組:

+0

您正在嘗試使該樣品輸入字符串,你在你的問題你最終像這樣的東西下面提供提取數字? [1,5,9,15,17,24,31,33]。是對的嗎? –

+0

嗨弗朗西斯,輸出必須在我的問題中的示例數據庫中。 – Reman

回答

1

您可以使用這樣一個正則表達式打破你輸入的字符串

  • 組1:下界你要創建的整數序列。
  • 組2:要創建的整數序列的上限。

然後,您將循環執行每個正則表達式匹配,從而產生匹配給出的邊界數字序列。

我不確定您有權訪問哪種代碼環境。所以這裏有一個C#函數,它可以根據您提供的示例輸入字符串生成所需的輸出。

private static string DecodeSequence(string encodedSequence) 
{ 
    const string SEPARATOR = ","; 
    const int GRP_LBOUND = 1, GRP_UBOUND = 2; 
    Regex boundPairPattern = new Regex(@">(\d+)\D+(\d+)"); 
    Match matchBoundPair = boundPairPattern.Match(encodedSequence); 

    var decodedSequence = new StringBuilder(); 
    while (matchBoundPair.Success) 
    { 
     int lBound = Convert.ToInt32(matchBoundPair.Groups[GRP_LBOUND].Value); 
     int uBound = Convert.ToInt32(matchBoundPair.Groups[GRP_UBOUND].Value); 
     for (int i = lBound + 1; i < uBound; ++i) 
     { 
      decodedSequence.Append(i).Append(SEPARATOR); 
     } 
     matchBoundPair = matchBoundPair.NextMatch(); 
    } 
    if (decodedSequence.Length > 0) decodedSequence.Length -= SEPARATOR.Length; 
    return String.Format("[{0}]", decodedSequence); 
} 
+0

你好弗朗西斯,謝謝你的回覆,但是我沒有C環境。我的問題是一個vimscript問題。順便說一句,有人已經改變了我的標籤,他刪除了Vim標籤:( - 我剛剛添加了它。 – Reman

+0

@Remonn - 我不太瞭解vim或其腳本語言,但也許你可以使用上面的代碼作爲Filter在vim中? –

-1

當你分析數據,你會認識到結構:由\|

  • 下限和上限由.
  • 綁定包括無趣的東西,在分隔符分隔

    1. 範圍前面(\%),印記(</>),數字和末尾無趣的東西
    2. 取決於印象,數量需要增加/減少以獲得第一個/最後一個行號

    我會逐步處理數據;每個步驟只是簡單調用split(),matchstr(),matchlist()或其他基本操作。

    例如,第一步是

    :echo split('\%(\%>1l.\%<4l\|\%>5l.\%<7l\|\%>9l.\%<15l\|\|\%>15l.\%<17l\|\%>17l.\%<19l\|\%>24l.\%<29l\|\%>31l.\%<33l\|\%>33l.\%<35l\)', '\\|') 
    
  • +0

    謝謝,對你來說是一切都很簡單。我想你已經使用vim很多年了。即使用你的例子,我也找不到如何解決我的問題p.e.在字符串的開頭有一個'\%('),不知道如何去除整個字符串中的'\%[<>]'和'l' – Reman

    +0

    你的問題是關於處理算法的技術細節,所以看起來你確切地知道你想要達到什麼目標,如果你是初學者,只是想學習Vimscript,我會建議從簡單的開始,如果OTOH在Vim中有特殊的問題需要解決,爲什麼不你告訴我們關於這個問題(用用戶的話來說),而不是專注於沒有周圍環境的技術細節?! –

    +0

    爲什麼你總是在問簡單的問題?然後你寫我必須編寫vim手冊。嘗試和閱讀閱讀和測試測試我無法找到事情的工作原理,我相信我已經問過這樣一個問題,就像一年前的那個問題一樣。不知道怎麼做!!是的,有多個替代命令和一個formule之間增加一個數字'' >和'>'字符,2頁代碼。必須有一個更簡單的方法。我不能在這裏寫下所有的代碼。所以如果你告訴我閱讀幫助手冊,請不要回復。 – Reman

    相關問題