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.*代替[^(]*or的原因[^)]*

于 2010-03-02T11:53:08.210 回答
1

更新

好的,[^(]+在 jEdit 默认正则表达式标志中,也吃掉\n了(我没有看到在 jEdit 搜索/替换 UI 中设置多行标志的任何选项),

所以,这是一个新的,用你更新的文字确认

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

--- 上一个答案 ---

杰迪特,

搜索 :^(\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如果您想一次处理多行,您可能也需要标志。
于 2010-03-02T10:13:31.053 回答
0

尝试以下操作:

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

仅当前面有一个左括号时,它才会向前和向后查找以匹配行尾带有右括号的行。

用哈希替换将为您提供所需的输出,它也会在行首去除空格,如果这是您想要的目标,但似乎最有可能。

于 2010-03-02T10:55:45.687 回答