2015-07-02 59 views
3

的前n個字符我想從這個正則表達式匹配的第一個字符n獲得一個正則表達式匹配

(\d+\s*) 

基本上我想用空格右板。所以在臺詞:

12345␢␢␢␢␢␢␢␢123␢␢␢␢␢␢␢ 
123␢␢␢␢␢␢␢␢␢12345␢␢␢␢␢␢ 

我想完成:

12345␢␢␢␢␢123␢␢␢␢␢␢␢ 
123␢␢␢␢␢␢␢12345␢␢␢␢␢ 

總是有一行兩場比賽和線具有恆定的長度。

+1

使用'。{n}'第二次匹配?不確定記事本(從未使用它),但在[tag:grep]中,您可以使用'grep -o。\ {n \}'再次匹配,然後獲得所需的結果。 – ShellFish

+0

你想用你的正則表達式來表達什麼?爲什麼像這樣'^。{n}'還不夠? – bro

+0

@bro好。它將用於第一列。第二個?檢查更新後的問題 –

回答

2

多遍

基於對這個問題的額外信息,它的結構,我會建議以下步驟:

  1. 一分爲二的每一行,第二模式之前。
  2. 從每一行抓取所需的部分。
  3. 將這些行重新組合,使其匹配在原始行上。

這意味着這樣的事情:

  1. 更換^(\d*\s*)(\d*\s*)$$1\r\n$2。如果你不在窗戶上,簡單地刪除\r,我懷疑。你也許應該考慮在行尾添加一個宏。這應該是文檔其餘部分未包含的內容(例如#)。 $1的意思是,替換第一個捕獲的組(括號內的東西)。所以用$1#\r\n$2代替它。
  2. 現在抓住每行所需的長度:(^.{n}).*(#?)並用$1$2替換。這將捕獲第一個n符號並插入宏,如果它被發現。
  3. 刪除宏後的換行符:#\r\n。要麼刪除這些或用\0替換它們。

注意

  • 你得先過濾匹配(^\d*\s*)行。
  • 如果您想要另一個宏,請在答案上方將#的出現次數分開。它不應該包含在文件的其餘部分,至少不在行尾。
  • 此答案使用反向引用,它應該是no problem

單通道

單通可能可以過這裏。

^(\d[\d\s]{n-1})[^\d]*(\d[\d\s]{n-1}).*$ 

匹配這些行,如果您提取組1和2,則會從文件中過濾所需的輸出。只需將其替換爲$1$2即可。

1

替換:

(\d[\d\s]{n-1})\s* 

有了:

$1 

這將替換一個數字,然後按n-1數字或空格字符,後跟任意數量的空白字符由什麼匹配的第一個n字符(因此你應該得到每行2個匹配)。