正则表达式在C#中提取子串

时间:2017-06-16 08:02:41

标签: c# .net regex c#-4.0

我有一个字符串:

 string subjectString = @"(((43*('\\uth\Hgh.Green.two.190ITY.PCV')*9.8)/100000+('VBNJK.PVI.10JK.PCV'))*('ASFGED.Height Density.1JKHB01.PCV')/476)";

我的预期输出是:

Hgh.Green.two.190ITY.PCV
VBNJK.PVI.10JK.PCV
ASFGED.Height Density.1JKHB01.PCV

以下是我的尝试:

 Regex regexObj = new Regex(@"'[^\\]*.PCV");
 Match matchResults = regexObj.Match(subjectString);
 string val = matchResults.Value;

当输入字符串为:"@"(((43*('\\uth\Hgh.Green.two.190ITY.PCV')*9.8)/100000+";时,这种方法有效但是当字符串增长并且要提取的子字符串数大于1时,我得到了不希望的结果。

如何从原始字符串中提取三个子字符串?

1 个答案:

答案 0 :(得分:2)

您似乎希望在.之前匹配单词和.PCV字符。

使用

[\w\s.]*\.PCV

请参阅regex demo

在开始时强制使用至少1个字的字符

\w[\w\s.]*\.PCV

如果需要,可选择在开头添加单词边界:@"\b\w[\w\s.]*\.PCV"

要强制\w仅匹配ASCII字母和数字(和_),请使用RegexOptions.ECMAScript选项编译正则表达式对象。

在这里,

  • \w - 匹配任何字母,数字或_
  • [\w\s.]* - 匹配0 +空格,字或/和.字符
  • \. - 文字.
  • PCV - PCV子字符串。

样本用法:

var results = Regex.Matches(str, @"\w[\w\s.]*\.PCV")
    .Cast<Match>()
    .Select(m=>m.Value)
    .ToList();