正则表达式 - 匹配括号而不匹配其内容

时间:2016-10-17 12:43:23

标签: regex swift

我只需要围绕一些必须符合特定条件的内容匹配括号。我只需要匹配括号,这样我就可以快速替换那些括号并​​保留它们的内容。

目前,我所拥有的内容与那些特定的括号相匹配,但遗憾的是它们的内容:\((?:\d{2,7})\)

匹配括号的标准如下:

  • 仅匹配包含\d{2,7}
  • 的括号

我已经尝试过积极的前瞻(\((?=\d{2,7})\)),虽然它确实没有消耗开括号后面的任何内容,但它无法匹配右括号,因为它回溯到内容之前......

所以是的,任何帮助都会受到赞赏:)

3 个答案:

答案 0 :(得分:1)

正则表达式可以是\((\d{2,7})\)。它将匹配所有配对括号和内容,内容可通过参数1访问,并可添加到替换括号的字符串中。

我认为如何访问正则表达式的结果是特定于语言的。

修改

这是可以工作的代码。它没有经过考验,我最初要警告你:

这是我第一次使用Swift和在线沙盒,我发现无法编译它。但它无法从Apple网站编译示例,或者......

import Foundation

let text = "some input 22 with (65498) numbers (8643)) and 63546 (parenthesis)"
let regex = try NSRegularExpression(pattern: "\\((\\d{2,7})\\)", options: [])

let replacedStr = regex.stringByReplacingMatchesInString(text, 
                options: [], 
                range: NSRange(location: 0, length: text.characters.count), 
                withTemplate: "$1")

答案 1 :(得分:1)

Pure RegEx模式:\((?=\d{2,7}\))|(?<=\()\d{2,7}\K\)

更新:我不了解Swift,但根据此documentation,模板匹配格式部分,let myString = "(32) 123-323-2323" let regex = try! NSRegularExpression(pattern: "\\((\\d{2,7})\\)") let range = NSMakeRange(0, myString.characters.count) regex.stringByReplacingMatchesInString(myString, options: [], range: range, withTemplate: "$1") 也可以类似地使用,如

str.replaceAll("\\((\\d{2,7})\\)", "$1")

假设您使用的是Java,我会建议一些简单的事情 \((\d{2,7})\)

模式<input>使用带有第1组中数字的parantheses捕获整个表达式,并仅用内部数字替换它,从而有效地删除周围的括号。

答案 2 :(得分:0)

你是否可以删除所有括号?:[()]完成 显然你已经说过这不好,虽然在问到第一个问题的时候还不清楚。

所以,然后尝试捕获数字部分并将其用作匹配的替代。喜欢:in.replaceAll("\\((\\d{2,7})\\)","$1")。 为了使任何正则表达式系统能够使用它,非常清楚地说明这一点:
匹配:\(([0-9]{2,7})\)表示(一个2到7位数的子组和一个)
将每个匹配替换为:对该匹配的第一个子组捕获的引用。数字。

您可以在输入中询问此操作:

  

给定一些(未指定的)包含(1)(12)(123)等到(1234567)和(12345678)的输入,我们将它用于剥离(某些)括号。

如果您follow this fiddle.re link,请按绿色按钮。 或者在this regex101.com link处使用更多自动说明。

或者用匹配内容的子字符串替换每个匹配怎么样,所以你甚至不需要子组,因为你从不想要匹配的第一个或最后一个字符。像:

 Pattern p = Pattern.compile("\\(\d{2,7}\\)");
 Matcher m = p.matcher(mysteryInputSource);
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, mysterInputSource.substring(m.start()+1, m.end));
 }
 m.appendTail(sb);
 System.out.println(sb.toString());

由于您没有使用Java,请尝试将上述任何建议翻译成您的语言。