[英]Get a substring from a substring of a string in C# using regex
我想提取一个 substring 遵循特定的 substring 并以长字符串中的特定字符结尾。
我有一个长字符串: "<can be whatever characters or string>CSVSegment.ab12\<can be whatever characters or string>CSVSegment.cd34\<can be whatever>"
我只想提取ab12和cd34 ,基本上是在CSVSegment之后并在 \ 之前结束的任何内容
目前我正在做
Regex pattern = new Regex(@"CSVSegment.(?<SegmentName>))\");
Match match = pattern.Match(longstring);
我不知道如何为此使用组,以及如何获取遵循 CSVSegment 的字符串列表。 并在 \ 之前结束长字符串中的所有出现。
据我所知,你想匹配
ab12
cd34
从
....CSVSegment.ab12\....
....CSVSegment.cd34\....
你可以用CSVSegment\.(?<SegmentName>[^\\]*)\\
模式来做到这一点:
Regex pattern = new Regex(@"CSVSegment\.(?<SegmentName>[^\\]*)\\");
var result = pattern
.Match(source)
.Groups["SegmentName"]
.Value;
或者,如果您想要所有匹配项
var results = pattern
.Matches(source)
.Cast<Match>()
.Select(m => m.Groups["SegmentName"].Value)
.ToArray();
模式CSVSegment\.(?<SegmentName>[^\\]*)\\
解释:
CSVSegment\. - prefix, note that dot ('.') has been escaped
(?<SegmentName>[^\\]*) - zero or more any symbols but \
\\ - suffix \, note escapement
在这里我们需要擒纵机构,因为.
(点)表示任何字符, \
表示转义符号。
你需要类似的东西:
Regex pattern = new Regex(@"CSVSegment\.(?<sn>[a-z0-9]{4})\");
MatchCollection matches = pattern.Matches(longstring);
foreach(Match m in mc)
Console.WriteLine(m.Groups["sn"].Value);
您真正偏离轨道的唯一部分是没有在命名的捕获组中放置模式。 与组内的模式匹配的任何内容都将在组值中结束。 我放置了一个与ab12和cd34示例匹配的[a-z0-9]{4}
模式,但如果您的数据范围更广,您可能希望更改此模式以匹配将看到的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.