替换内容括号及其内容的正则表达式

Regular expression to replace content parentheses and their contents

我正在寻找一个正则表达式来替换括号和其中的字符串 if 字符串任何不是数字的东西。

字符串可以是任意字符组合,包括数字、字母、空格等

For example:

(3) will not be replaced

(1234) will not be replaced

(some letters) will be replaced

(some letters, spaces - and numbers 123) will be replaced

到目前为止,我有一个可以替换任何括号及其内容的正则表达式

str = str.replaceAll("\(.*?\)","");

我不擅长replaceAll的语法,所以我就按照你写的方式来写。但我想我可以帮助你处理正则表达式。

试试这个正则表达式:

\((?=[^)]*[a-zA-Z ])[^)]+?\)

Demo

或者更好的:

\((?!\d+\))[^)]+?\)

Demo

解释(对于第一个正则表达式)

  • \( - 匹配左括号
  • (?=[^)]*[a-zA-Z ]) - Positive Lookahead - 检查 0 个或多个不是 ) 后跟 space 或字母
  • 的字符
  • [^)]+? - 捕获 1 个或多个不是 )
  • 的字符
  • \) - 最终匹配结尾的 Paranthesis

解释(对于第二个正则表达式)

  • \( - 匹配左括号
  • (?!\d+\)) - Negative Lookahead - 仅匹配那些在左括号之后但在右括号出现之前没有所有字符作为数字的字符串
  • [^)]+? - 捕获 1 个或多个不是 )
  • 的字符
  • \) - 最终匹配结尾的 Paranthesis

现在,您可以将 Replace 语句尝试为:

str = str.replaceAll("\((?=[^)]*[a-zA-Z ])[^)]+?\)","");

str = str.replaceAll("\((?!\d+\))[^)]+?\)","");