您正在尝试解决正则表达式问题
我有一个公式解析器需要在某些标签中获取字符串,输入字符串将如下所示:
[//part1/part2/abc]+[/def]+[ghi]
我想要归还的只有三组:
abc
def
ghi
我有一个部分工作的正则表达式,它给我三个组,方括号之间的字符串,但我只是无法摆脱前缀路径。
如果有路径,它将始终使用正斜杠。
\[(.*?)\]
有人可以帮忙吗?
答案 0 :(得分:3)
答案 1 :(得分:3)
你可以试试这个:
@"\[(?:[^]/]*/)*([^]/]+)]"
可选的非捕获组将以斜杠匹配所有结尾。
答案 2 :(得分:2)
直接匹配(无捕获)
这个正则表达式有点复杂,因为我们不是捕获你想要的第1组,而是直接匹配它。
正则表达式还验证我们位于[brackets]
:
(?x) # free-spacing mode
(?<= # look behind: we should see
\[ # an opening bracket, then
(?:(?:[^/\]]*/+)+)? # optionally, one or more series of
# non-slashes, non-closing brackets followed by slashes
) # end lookbehind
[^/\]]* # this is what we want to match: any character that is not a / or a ]
(?=[^/]*\]) # lookahead: we should see no slashes, then a closing ]
请参阅demo。
您可以在这种自由间距模式下实际使用它,这使以后易于维护和理解。解释在评论中。
在C#代码中
以下是在C#中使用此正则表达式的一种方法:
Regex yourRegex = new Regex(@"(?x) #free-spacing mode
(?<= # look behind: we should see
\[ # an opening bracket, then
(?:(?:[^/\]]*/+)+)? # optionally, one or more series of
# non-slashes, non-closing brackets followed by slashes
) # end lookbehind
[^/\]]* # this is what we want to match: any character that is not a / or a ]
(?=[^/]*\]) # lookahead: we should see no slashes, then a closing ]
");
allMatchResults = yourRegex.Matches(yourstring);
if (allMatchResults.Count > 0) {
// Access individual matches using allMatchResults.Item[]
}