【发布时间】:2017-09-03 14:43:42
【问题描述】:
我正在寻找一个正则表达式,它将替换括号和其中的字符串如果字符串不是数字。
字符串可以是任意字符组合,包括数字、字母、空格等
例如:
(3) 不会被替换
(1234) 不会被替换
(一些字母)将被替换
(一些字母、空格和数字 123)将被替换
到目前为止,我有一个正则表达式可以替换任何括号及其内容
str = str.replaceAll("\\(.*?\\)","");
【问题讨论】:
我正在寻找一个正则表达式,它将替换括号和其中的字符串如果字符串不是数字。
字符串可以是任意字符组合,包括数字、字母、空格等
例如:
(3) 不会被替换
(1234) 不会被替换
(一些字母)将被替换
(一些字母、空格和数字 123)将被替换
到目前为止,我有一个正则表达式可以替换任何括号及其内容
str = str.replaceAll("\\(.*?\\)","");
【问题讨论】:
replaceAll 的语法我不擅长,所以我就照你写的方式写。但我想我可以帮助你处理正则表达式。
试试这个正则表达式:
\((?=[^)]*[a-zA-Z ])[^)]+?\)
或者一个更好的:
\((?!\d+\))[^)]+?\)
解释(对于第一个正则表达式)
\( - 匹配左括号(?=[^)]*[a-zA-Z ]) - 正向预测 - 检查 0 个或多个不是 ) 后跟空格或字母的字符[^)]+? - 捕获 1 个或多个不是 ) 的字符
\) - 最终匹配结束括号说明(第二个正则表达式)
\( - 匹配左括号(?!\d+\)) - Negative Lookahead - 仅匹配那些在左括号之后但在右括号出现之前没有所有字符作为数字的字符串[^)]+? - 捕获 1 个或多个不是 ) 的字符
\) - 最后匹配结束括号现在,你可以试试你的 Replace 语句:
str = str.replaceAll("\((?=[^)]*[a-zA-Z ])[^)]+?\)","");
或
str = str.replaceAll("\((?!\d+\))[^)]+?\)","");
【讨论】: