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

时间:2017-09-03 04:28:15

标签: regex nsregularexpression

我正在寻找一个正则表达式,它将替换括号及其中的字符串如果字符串,则不是数字。

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

  

例如:

     

(3)不会被替换

     

(1234)将不会被替换

     

(某些字母)将被替换

     

(一些字母,空格 - 和数字123)将被替换

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

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

1 个答案:

答案 0 :(得分:1)

我对replaceAll的语法不太满意,所以我只想写你写的方式。但我想我可以帮助你使用正则表达式。

试试这个正则表达式:

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

Demo

或者更好的一个:

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

Demo

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

  • \( - 匹配开启的paranthesis
  • (?=[^)]*[a-zA-Z ]) - 肯定前瞻 - 检查0个或更多不是)后跟空格或字母的字符
  • [^)]+? - 捕获1个或多个不是)
  • 的字符
  • \) - 最后匹配关闭的Paranthesis

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

  • \( - 匹配开启的paranthesis
  • (?!\d+\)) - 否定前瞻 - 仅匹配那些在开始修缮之后但在关闭时才显示所有字符作为数字的字符串
  • [^)]+? - 捕获1个或多个不是)
  • 的字符
  • \) - 最后匹配关闭的Paranthesis

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

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

OR

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