Java 正则表达式,用于将匹配行包装在磅符号内,但不包含前导空格

Java 正则表达式,用于将匹配行包装在磅符号内,但不包含前导空格,java,regex,jedit,Java,Regex,Jedit,在我的文本编辑器(Jedit)的查找/替换功能中,是否有一个正则表达式可用于执行以下操作: ^\s*(?=((.*)(?<=\((.*)\))$))|(?<=\((.*)\))$ 匹配文本文件中符合以下条件的任何行: 该行以右括号结束 同一行的某个地方有一个左括号 如果匹配,我需要在#符号内包装行上的所有文本,但不要在行首添加任何空格 示例1 这一行: Total reimbursements (before end of Q1) 需要替换为以下内容: #Total reimbu

在我的文本编辑器(Jedit)的查找/替换功能中,是否有一个正则表达式可用于执行以下操作:

^\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上我是比赛发生的地方。谢谢你的截图。这些都是我正在使用的设置。它似乎对我的测试文件不起作用。你能在问题中提供更多的测试模式吗?谢谢你的坚持。我在上面添加了一些新的测试用例。是的!它起作用了!你的“替换”需要的唯一更改图案是你忘记的尾随的磅符号。所以,用这个替换