2016-08-09 162 views
1

試圖在Notepad++中使用正則表達式。我想有以下發生:正則表達式捕獲組子串

姓:喬納森

替換爲:

姓:喬納

我已經試過如下:

查找聲明

姓:

替換表(*):

姓:\ 1

爲了把它變成所捕獲的基團。但現在我需要那個被捕獲的組是truncated/substring,所以它只是第一個四個個字符。當我進行替換時,它會替換完整的字符串,但我不清楚如何獲取捕獲組的前四個字符。我試過(.*){4}但是沒有任何回報。

謝謝!

回答

1

這裏有很長的路要走:

  • 查找內容:(FirstName:.{1,4}).*?$
  • 替換爲:$1
1

我不知道有訪問只是一部分的方式匹配的組,但您可以只匹配您想要的部分。

你的新發現語句將只捕獲前4個字符,但仍符合其他:

FirstName: (.{4}).*?$ 

轉換爲「查找字符串‘姓:’,然後記下四個字符,然後繼續一直走到最後。「

你REPLACE語句就幾乎和以前一樣(我包括名字後有一個空格):

FirstName: \1 
+0

請注意,如果在「FirstName:」之後少於4個字符,則該正則表達式將不匹配,並且將被完全忽略,這與捕獲'(。{1,4})'相同,插入它。實際上'。*?'可以用'。+?'替換,並且在「FirstName:」之後的正好有4個字符的例子也會被忽略。但是對於大多數情況(除非不區分大小寫和其他奇怪),這些都是相同的。 – c0d3rman

0

如果它是在該行線的導向開始,
或唯一的行項目,這將工作。

查找:(?im)^[^\S\r\n]*(firstname:)[^\S\r\n]*([a-z]{0,4}|.{0,4}).*
替換:FirstName $1

如果它在字符串的中間,它會採取更多的努力。
必須看到一些例子,因爲必須使用僞錨。

0

此模式只會打擾多餘長度的處理線以截斷。

我的模式不僅會在步數/效率方面超越其他答案,而且它也不會在替換字段中引用任何參考或文本。

使用此:(Pattern Demo

查找:FirstName: .{4}\K.+
替換:[無]

*注意,在\K意味着 「開始從這點匹配」。 .+將停在每行的末尾。