我只需要围绕一些必须符合特定条件的内容匹配括号。我只需要匹配括号,这样我就可以快速替换那些括号并保留它们的内容。
目前,我所拥有的内容与那些特定的括号相匹配,但遗憾的是它们的内容:\((?:\d{2,7})\)
匹配括号的标准如下:
\d{2,7}
我已经尝试过积极的前瞻(\((?=\d{2,7})\)
),虽然它确实没有消耗开括号后面的任何内容,但它无法匹配右括号,因为它回溯到内容之前......
所以是的,任何帮助都会受到赞赏:)
答案 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,请尝试将上述任何建议翻译成您的语言。