Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-匹配括号而不匹配其内容_Regex_Swift - Fatal编程技术网

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")