1

テキストエディタ(Jedit)の検索/置換機能で次のことを行うために使用できる正規表現はありますか?

次の条件を満たすテキストファイルの行に一致します。

  1. 行は閉じ括弧で終わります
  2. 開き括弧は同じ行のどこかにあります

一致する場合は、行のすべてのテキストを折り返す必要がありますが、行の先頭に空白はありません#

例1

この行:

Total reimbursements (before end of Q1)

これに置き換える必要があります:

#Total reimbursements (before end of Q1)#

例2(先頭の空白)

この行(Totalという単語の前に空白がある場合):

                             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
4

4 に答える 4

2

これは私がしました:

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

試合で$1#$ 2($ 3)#を印刷しました。

于 2010-03-02T10:12:43.653 に答える
2

正規表現:

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

置換:

$1#$2#

最も難しいのは、正規表現のどの部分も改行と一致しないようにすることです。そのため、または[ \t]*の代わりに\s*and.*の代わりに使用しました。[^(]*[^)]*

于 2010-03-02T11:53:08.210 に答える
1

更新

OK、[^(]+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)'
  • 行に角かっこが1つしかないことを前提としています
  • \s*末尾にスペースがある場合は、最終的には必要ありません
  • re.MULTILINE1回のショットで複数の行を処理する場合は、おそらくフラグも必要になります。
于 2010-03-02T10:13:31.053 に答える
0

次のことを試してください。

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

開始ブラケットが前にある場合にのみ、行の終わりにある終了ブラケットと行を一致させるために前後を調べます。

ハッシュに置き換えると、目的の出力が得られます。これにより、行の先頭の空白も削除されます。これが目的の目標であるかどうかはわかりませんが、最も可能性が高いと思われます。

于 2010-03-02T10:55:45.687 に答える