Regex 正则表达式-匹配括号而不匹配其内容
我只需要匹配一些内容周围的括号,这些内容必须匹配特定的条件。我只需要匹配括号,这样我就可以快速替换那些括号并保留它们的内容 目前,我所拥有的内容与这些特定的括号相匹配,但不幸的是,也与它们的内容相匹配: 匹配括号的标准如下所示:Regex 正则表达式-匹配括号而不匹配其内容,regex,swift,Regex,Swift,我只需要匹配一些内容周围的括号,这些内容必须匹配特定的条件。我只需要匹配括号,这样我就可以快速替换那些括号并保留它们的内容 目前,我所拥有的内容与这些特定的括号相匹配,但不幸的是,也与它们的内容相匹配: 匹配括号的标准如下所示: 仅匹配包含\d{2,7} 我已经尝试了正向前瞻(),虽然它确实不使用开括号后面的内容,但由于它回溯到内容之前,因此无法匹配右括号 因此,是的,任何帮助都将不胜感激:)不管怎样,您都可以删除所有括号吗?:[()]完成。 显然你说那不好,尽管在第一次被问到问题的时候还不
- 仅匹配包含
\d{2,7}
因此,是的,任何帮助都将不胜感激:)不管怎样,您都可以删除所有括号吗?:
[()]
完成。显然你说那不好,尽管在第一次被问到问题的时候还不清楚 因此,请尝试捕获数字部分并将其用作匹配项的替换。比如:
in.replaceAll(\\(\\d{2,7})\\),“$1”)
。
简单地说,任何正则表达式系统都可以使用它:匹配:
\([0-9]{2,7})
表示一个(
一个2到7位的子组和一个)
将每个匹配替换为:对该匹配的第一个子组捕获的引用。数字 您可以在输入上看到此操作: 给定一些包含(1)(12)(123)等到(1234567)和(12345678)的(未指定)输入,我们使用它来去掉(一些)括号 如果需要,请按绿色按钮。 或者更自动的解释 或者用匹配内容的子字符串替换每个匹配,这样您甚至不需要子组,因为您永远不需要匹配的第一个或最后一个字符。比如:
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,请尝试将上述建议翻译成您的语言。正则表达式可以是\((\d{2,7})\)
。它将所有配对括号与内容匹配,并且可以通过参数1
访问内容,并且可以将内容添加到替换括号的字符串中
我认为,如何访问regex的结果是特定于语言的
编辑:
下面是可以工作的代码。这是未经测试的,我必须先警告你:
这是我第一次体验Swift和在线沙盒,我发现它无法编译。但它也无法从苹果网站上编译示例
纯正则表达式模式:
更新:我不知道Swift,但是根据这个,模板匹配格式部分,
$n
也可以类似地使用,如
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")
假设您正在使用Java,我建议您做一些简单的事情
str.replaceAll(\\(\\d{2,7})\\),“$1”)
模式
\((\d{2,7})\)
捕获整个表达式,其中包含第1组中的数字,并将其替换为仅包含其中的数字,因此有效地去除了周围的括号。这是什么语言?哦,对不起,是的,我意识到我使用了String.replaceAll
认为这是通用的伪语言,但它显然很像Java。对于我的案例,我实际上在使用Swift,它将更新我的问题。谢谢你的评论!另请参阅regex的标签信息:确实,该解决方案将是完美的,但不幸的是,我意识到我没有指定我使用的是Swift。。。在这种情况下,没有这样的replaceAll
函数纯正则表达式模式正是我想要的,非常感谢!谢谢你的迅速回答!关键是,不,简单地删除所有括号是不行的。我只想删除特定的圆括号,这样以后就只能正确解析这些部分了。关于语言,我的糟糕,我忘了指定我使用的是Swift:/@Skwiggs So;我不知道swift,但这并不意味着你不能简单地通过学习如何使用正则表达式,然后按照我的建议去做。这种模式不需要区分大小写。@dlamblin是的,你是对的,如果它不存在,也没什么区别。
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")