2010-03-02 11 views
1

有沒有我可以在查找使用正則表達式/替換我的文本編輯器(JEDIT)的功能來做到以下幾點:正則表達式來包裝配套英鎊符號內部線,但沒有前導空格

匹配任何行滿足這些標準的文本文件:

  1. 線路與一個右括號
  2. 左括號在同一行上的某處存在結束

如果匹配,我需要將所有文本包裝在行中 - 但不在行首的空白處 - #標誌內。

實施例1

這條線:

Total reimbursements (before end of Q1) 

需要與此替換:

#Total reimbursements (before end of Q1)# 

實施例2(前導空白)

這條線(其中有字前共計空格):

       Total reimbursements (before end of Q1) 
需求

要與此(#符號放在第一個字母之前就行)改爲:

       #Total reimbursements (before end of Q1)# 

但與此:

#        Total reimbursements (before end of Q1)# 

示例文本文件:

Base Expenses 
&&&&&&&&&&&&&&&&&&&&&&& 


Provides options towards multilateral improvements 

Opening Debt(Option patterns) 
      A copy provided externally 

Customer Summary 
&&&&&&&&&&&&&&&&&&&&&&&&& 

External Console(foreign debt) 
      Provide execution amounts 
Internal Console(domestic debt) 
      Release to appropriations committee 

Explanations provided to external clients 

Neutralized Amounts() 
      Forex portion 

回答

2

正則表達式:

^([ \t]*)(.*\(.*\))$

更換:

$1#$2#

最棘手的事情是要確保沒有正則表達式可以匹配換行符的一部分。這就是爲什麼我使用[ \t]*而不是\s*.*而不是[^(]*[^)]*

+0

這是唯一的解決方案,可以完美地對付我所有的測試文件。非常感謝!! – Bowe 2010-03-02 21:13:31

2

我這樣做:

regex = /^(\s*)(.*)\((.*)\)$/ 

和印刷$ 1號$ 2($ 3)#上的匹配。

+0

它對我的文本文件沒有影響。 – Bowe 2010-03-02 10:14:53

+0

它需要全局和多行標誌/^(\s*)(.*)\((.*)\)$/gm global - >獲取所有匹配項; 多行 - >'^'代表行的開始(不是字符串的開頭),'$'代表行的末尾(不是字符的結尾) – Biroka 2010-03-02 10:22:21

+0

@Biroka:多行模式通常是文本編輯器中的默認行爲,全局部分是通過點擊Replace All而不是Replace來實現的。 @Bowe:你是否在兩端刪除了斜槓? – 2010-03-02 11:58:17

1

UPDATE

好吧,[^(]+中的jEdit默認的正則表達式標誌,吃\n太(我沒有看到任何選項來設置多標誌jEdit的查找/替換UI),

所以,這裏是新的,並提供更新的文字確認

搜索:^(\s*)([^(\n]+\([^)\n]*\))\s*$
替換:$1#$2

---以前的答案---

JEDIT,

搜索:^(\s*)([^(]+\([^)]+\))\s*$
替換:$1#$2

---以前的以前的答案---

的Python,'^(\s*)([^(]+\([^)]+\))\s*$'

>>> import re 
>>> 
>>> re.sub('^(\s*)([^(]+\([^)]+\))\s*$','\\1#\\2','Total reimbursements (before end of Q1)') 
'#Total reimbursements (before end of Q1)' 
>>> 
>>> re.sub('^(\s*)([^(]+\([^)]+\))\s*$','\\1#\\2','        Total reimbursements (before end of Q1)') 
'        #Total reimbursements (before end of Q1)' 
  • 假設只有一個在中端線
  • \s*就不需要支架,如果有尾隨空格
  • 你可能需要re.MULTILINE標誌也一樣,如果你想在一杆來處理多行。
+0

在括號中沒有文字的情況下對其進行了試用,它在那裏沒有效果。在圓括號之間有文本的另一個示例中,它將文件中的英鎊符號放在文件的前面,而不是放在匹配發生的同一行。 – Bowe 2010-03-02 10:34:25

+0

要匹配'()',將'[^)] +'更改爲'[^)] *'將起作用 – YOU 2010-03-02 10:44:06

+0

感謝您的屏幕截圖。這些也是我正在使用的設置。它似乎不適用於我的測試文件。 – Bowe 2010-03-02 10:58:38

0

嘗試以下方法:

^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$ 

它看起來向前和向後方僅在如果前面通過的開口支架線的末端匹配的閉合托架線。

用散列替換會給你所需的輸出,它也會在行的開始處去掉空白,如果這是你想要的目標,但是看起來最有可能,那麼不會加上空格。

+0

我在Jedit中運行它時遇到了這個錯誤:java.util.regex.PatternSyntaxException:Look-behind組在最接近索引23處沒有明顯的最大長度 – Bowe 2010-03-02 11:01:10

+0

是的,在Java中這是一個無效的正則表達式,因爲它在大多數其他正則表達式。它可以在EditPadPro中運行,但正如你所說的那樣,它可以去除領先的空白 - 包括空白行。 – 2010-03-02 12:13:34

相關問題