我有一个字符串:
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时,我得到了不希望的结果。
如何从原始字符串中提取三个子字符串?
答案 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();