我试图在字符串中匹配平衡大括号({}).例如,我想平衡以下内容:
if (a == 2)
{
doSomething();
{
int x = 10;
}
}
// this is a comment
while (a <= b){
print(a++);
}
Run Code Online (Sandbox Code Playgroud)
我从MSDN中得到了这个正则表达式,但是效果不好.我想提取多个{}的嵌套匹配集.我只对父母比赛感兴趣
"[^{}]*" +
"(" +
"((?'Open'{)[^{}]*)+" +
"((?'Close-Open'})[^{}]*)+" +
")*" +
"(?(Open)(?!))";
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含子串的字符串
# the substrings and the whole string surrounded by parenthesis
string = '((substring1)(substring2))'
Run Code Online (Sandbox Code Playgroud)
我想使用正则表达式获取substring1和substring2,但我遇到了问题:(
这就是我现在拥有的:
match = re.search('(\(.*\))', string)
print match.groups()
Run Code Online (Sandbox Code Playgroud)
问题是,结果显示:
('(substring1)(substring2)', )
Run Code Online (Sandbox Code Playgroud)
似乎正则表达式只匹配第一个左括号和最后一个右括号.
换句话说,匹配的正则表达式就像..
( match..... )
Run Code Online (Sandbox Code Playgroud)
代替
( (match1)(match2) )
Run Code Online (Sandbox Code Playgroud)
如何使正则表达式捕获INNER括号?
谢谢
下面是我正在使用的一些数据的示例.我已经阅读了一些涉及此主题的帖子,以及在regex101上尝试了一段时间.
BotInfo[-]: Source IP:[10.1.1.100] Target Host:[CentOS70-1] Target OS:[CentOS
7.0] Description:[HTTP Connection Request] Details:[10.1.1.101 - - [28/May
/2013:12:24:08 +0000] "GET /math/html.mli HTTP/1.0" 404 3567 "-" "-" ] Phase:
[Access] Service:[WEB]
Run Code Online (Sandbox Code Playgroud)
目标是拥有两个捕获组.一个用于标记(例如,源IP,目标主机,描述等),另一个用于最外面的方括号中包含的内容.
它是"最外层"的东西,因为Details标签的内容中有方括号.
这是我目前在所述正则表达式上取得的进展.我正在使用/ g标志:
\s?([^:]+):\[(.*?(?=\]\s.*?:\[))\]
Run Code Online (Sandbox Code Playgroud)
除了边缘情况之外,它处理所有事情(它比需要的更复杂,因为我一直在努力让边缘情况起作用).
我当前的lookahead(\]\s.*?:\[),在高级别,是匹配最后左括号,然后匹配下一个标签.另一个问题是,在最后一场比赛中失败,因为没有以下标签.
编辑:请求成功输出的示例.使用提供的数据,目标是有两个捕获组产生这些对:
MATCH 1
1. `Source IP`
2. `10.1.1.100`
MATCH 2
1. `Target Host`
2. `CentOS70-1`
MATCH 3
1. `Target OS`
2. `CentOS 7.0`
MATCH 4
1. `Description`
2. `HTTP Connection Request`
MATCH 5
1. `Details`
2. `10.1.1.101 - - [28/May/2013:12:24:08 +0000] "GET …Run Code Online (Sandbox Code Playgroud) 有多个C++文件.我需要从这些文件中提取for循环体.
有没有一种简单的方法可以使用grep来做到这一点.考虑没有嵌套的for循环.
() [] {}这些是有效的匹配,但是({)}是假的,例如:
() - true
()[]- true
()[]{} - ture
([]) - false
(){[}] - false.
Run Code Online (Sandbox Code Playgroud)
我可以使用正则表达式来计算吗?