Java 正则表达式,用于将匹配行包装在磅符号内,但不包含前导空格
在我的文本编辑器(Jedit)的查找/替换功能中,是否有一个正则表达式可用于执行以下操作:Java 正则表达式,用于将匹配行包装在磅符号内,但不包含前导空格,java,regex,jedit,Java,Regex,Jedit,在我的文本编辑器(Jedit)的查找/替换功能中,是否有一个正则表达式可用于执行以下操作: ^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$ 匹配文本文件中符合以下条件的任何行: 该行以右括号结束 同一行的某个地方有一个左括号 如果匹配,我需要在#符号内包装行上的所有文本,但不要在行首添加任何空格 示例1 这一行: Total reimbursements (before end of Q1) 需要替换为以下内容: #Total reimbu
^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$
匹配文本文件中符合以下条件的任何行:
#
符号内包装行上的所有文本,但不要在行首添加任何空格
示例1
这一行:
Total reimbursements (before end of Q1)
需要替换为以下内容:
#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)#
示例文本文件:
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
我这样做:
regex = /^(\s*)(.*)\((.*)\)$/
在火柴上印了$1#$2($3)#。我这样做:
regex = /^(\s*)(.*)\((.*)\)$/
并在一场比赛中打出1美元2美元3美元。更新: 好的,
[^(]+
在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
[^(]+
在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
^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$
^\s*(?=(*)(?尝试以下操作:
^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$
^\s*(?=(*)(?Regex:
^([\t]*)(.\(.*\)$
替换:
$1#$2#
最棘手的事情是确保正则表达式的任何部分都不能匹配换行符。这就是为什么我使用[\t]*
而不是\s*
和*
而不是[^(]*
或[^)]*
正则表达式:
^([\t]*)(.\(.*\)$
替换:
$1#$2#
最棘手的事情是确保正则表达式的任何部分都不能匹配换行符。这就是为什么我使用[\t]*
而不是\s*
和*
而不是[^(]*
或[^)]*
它对我的文本文件没有任何影响。它需要全局和多行标志/^(\s*)(.*)(.*)(.*)(.*))$/gm global->获取所有匹配项;多行->“^”表示行的开头(不是字符串的开头)“$”表示行的结尾(不是字符串的结尾)@Biroka:多行模式通常是文本编辑器中的默认模式,全局部分是通过单击Replace All
而不是Replace
来实现的@Bowe:你删除了末尾的斜杠吗?@Alan Moore:不,我没有删除斜杠,你是对的。没有斜杠也可以工作。对不起,user30997,我的错。($3)
重新插入括号和括号内的任何内容。它对我的文本文件没有影响。它需要全局和多行标志/^(\s*)(.*)(.*)(.*)$/gm global->获取所有匹配项;多行->'^'表示行的开始(不是字符串的开始),而'$'表示行的结束(不是字符串的结束)@Biroka:多行模式通常是文本编辑器中的默认模式,全局部分是通过单击Replace All
而不是Replace
来实现的@Bowe:你删除了末尾的斜杠吗?@Alan Moore:不,我没有删除斜杠,你是对的。没有斜杠也可以工作。对不起,user30997,我的错。($3)
重新插入括号和括号内的任何内容。在一个括号之间没有文本的示例上尝试,但没有效果。在另一个括号之间有文本的示例上,它将磅符号放在文件的前面,而不是放在匹配的同一行上。感谢屏幕截图。这些都是我正在使用的设置。它似乎对我的测试文件不起作用。你能在问题中提供更多的测试模式吗?谢谢你的坚持。我在上面添加了一些新的测试用例。是的!它起作用了!你的“替换”只需要更改一下模式是您忘记的尾随磅号。因此,使用此替换模式,它可以完美地工作:$1#$2#谢谢!在一个括号之间没有文本的示例上尝试了它,但没有效果。在另一个括号之间有文本的示例上,它将磅号放在文件的前面,而不是放在sa上我是比赛发生的地方。谢谢你的截图。这些都是我正在使用的设置。它似乎对我的测试文件不起作用。你能在问题中提供更多的测试模式吗?谢谢你的坚持。我在上面添加了一些新的测试用例。是的!它起作用了!你的“替换”需要的唯一更改图案是你忘记的尾随的磅符号。所以,用这个替换