我是否可以在文本编辑器(Jedit)的“查找/替换”功能中使用正则表达式来执行以下操作:
匹配符合以下条件的文本文件中的所有行:
如果匹配,我需要在行上包装所有文本 - 但不要在行开头的任何空格 - #
符号内。
示例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
答案 0 :(得分:2)
我这样做了:
regex = /^(\s*)(.*)\((.*)\)$/
并在比赛中打印$ 1#$ 2($ 3)#。
答案 1 :(得分:2)
正则表达式:
^([ \t]*)(.*\(.*\))$
的更换:
$1#$2#
最棘手的事情是确保正则表达式的任何部分都不能匹配换行符。这就是为什么我使用[ \t]*
代替\s*
和.*
而不是[^(]*
或[^)]*
。
答案 2 :(得分:1)
<强>更新强>:
好的,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
标志。答案 3 :(得分:0)
尝试以下方法:
^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$
只有在前面有一个左括号的情况下,它才能在行的末尾匹配行和一个右括号的行。
用散列替换会给你想要的输出,它也会在行的开头删除空格,如果这是你想要的目标,那么就不会起作用,但最有可能。