繁体   English   中英

使用正则表达式从 C# 中的字符串的 substring 获取 substring

[英]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>"

我只想提取ab12cd34 ,基本上是在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);

您真正偏离轨道的唯一部分是没有在命名的捕获组中放置模式。 与组内的模式匹配的任何内容都将在组值中结束。 我放置了一个与ab12cd34示例匹配的[a-z0-9]{4}模式,但如果您的数据范围更广,您可能希望更改此模式以匹配将看到的值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM