我有以下几点:
"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,而不是逗号。
发布于 2018-01-10 19:49:21
概述
因为您使用的是正向后向和正向后向,所以您只是断言这些匹配,但您没有使用字符。由于您没有使用这些字符,所以模式将匹配__前面的每个实例并跟踪该字符串。
代码
要解决这个问题,您可以简单地使用捕获组的捕获值,并删除查找和前瞻性。
__(.*?)__若要访问组,请使用属性
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}发布于 2018-01-10 19:44:47
您的regex也与__,__匹配。
你可以试试:
__([^_]*)__对我来说对你的样本有用。
发布于 2018-01-10 19:52:01
你可以这样做;
var str = "__Test1__,__Test2__,__test";
Regex regex = new Regex(@"(?<=__)([^,]*?)(?=__)");
MatchCollection matches = regex.Matches(str);
Output:
test1
test2除了使用负字符类的comma之外。
https://stackoverflow.com/questions/48194896
复制相似问题