我有以下内容:
"test","test",__Test1__,__Test2__,test
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Test3" value="__Test3__"/>
<add key="Test4" value="__Test4__"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
我正在尝试这个RegEx:
Regex regex = new Regex(@"(?<=__)(.*?)(?=__)");
MatchCollection matches = regex.Matches(fileContent);
但是我得到了以下结果:
Test1
,
Test2
Test3
Test4
当我只期待
时Test1
Test2
Test3
Test4
我做错了什么?
原始示例:
"test","test",__Test1__,__Test2__,__test
应仅返回Test1
和Test2
,不得逗号。
答案 0 :(得分:2)
由于您使用积极的外观和积极的外观,您只是断言那些匹配,但您不会消耗字符。由于您没有使用这些字符,因此该模式匹配__
在字符串之前和之后的每个实例。
要解决此问题,您只需使用捕获组的捕获值并删除lookbehind和lookahead。
__(.*?)__
要访问该论坛,请使用Match.Groups
property:
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
答案 1 :(得分:1)
您的正则表达式也匹配__,__
。
你可以尝试:
__([^_]*)__
对我而言,这对您的样本起了作用。
答案 2 :(得分:0)
你可以这样试试;
var str = "__Test1__,__Test2__,__test";
Regex regex = new Regex(@"(?<=__)([^,]*?)(?=__)");
MatchCollection matches = regex.Matches(str);
Output:
test1
test2
除comma
使用否定字符类。