一个例子,
我有一个包含让我们说的字符串:
function main {
// TODO print'hello {cmd get 世界}世界{nice}!的asdads
你好'l {o} l'。'asd'
}
如何只选择在''内且不在{}内的单词。此示例将返回输出:
匹配1:
'你好{
}世界{
}!“
匹配2:
“L {
} L'
匹配3:
'ASD'
非常感谢!
答案 0 :(得分:0)
MatchCollection matches = Regex.Matches(myInput, "'[^']+'", RegexOptions.SingleLine | RegexOptions.MultiLine);
现在的诀窍是只选择匹配的偶数索引。
答案 1 :(得分:0)
如果您只想分别使用所有六个匹配的字符串,我会使用['}].*?['{]
,但您似乎需要三个字符串,在这种情况下,我会首先将}[^']*?{
替换为}{
,然后匹配{ {1}}。
答案 2 :(得分:0)
这应该分两步让你得到你想要的东西:
IEnumerable<string[]> captures =
// Get the 'single quoted' tokens
Regex.Matches(s, "'[^']*'").Cast<Match>()
// Split each token by { blocks }, but keep the curly braces.
.Select(quoteMatch => Regex.Split(quoteMatch.Value, @"(?<=\{)[^{}]*(?=\})"))
.ToArray();
结果是一组字符串数组 - 每个集合都是“匹配”,每个字符串都是“组”。
可以在单个.Net正则表达式中完成所有这些操作,但它并不漂亮,而且更难以使用。这是一个有效的解决方案:http://ideone.com/qaceF,但是当有更简单的替代方案时,我认为这不是一个正确的答案。