【问题标题】:Regular expression to replace content parentheses and their contents替换内容括号及其内容的正则表达式
【发布时间】:2017-09-03 14:43:42
【问题描述】:

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

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

例如:

(3) 不会被替换

(1234) 不会被替换

(一些字母)将被替换

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

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

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

【问题讨论】:

    标签: regex nsregularexpression


    【解决方案1】:

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

    试试这个正则表达式:

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

    Demo

    或者一个更好的:

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

    Demo

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

    • \( - 匹配左括号
    • (?=[^)]*[a-zA-Z ]) - 正向预测 - 检查 0 个或多个不是 ) 后跟空格或字母的字符
    • [^)]+? - 捕获 1 个或多个不是 ) 的字符
    • \) - 最终匹配结束括号

    说明(第二个正则表达式)

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

    现在,你可以试试你的 Replace 语句:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多