Regex使用C#从字符串中获取值
本文关键字:获取 字符串 使用 Regex | 更新日期: 2024-10-19 23:28:36
我之前已经发布了这篇文章,但没有给出我想要实现的目标的明确信息。
我正在尝试使用c#中的Regex从字符串中获取值。我不明白为什么有些值我可以得到,有些值我不能使用类似的方法。
请在下面找到代码片段。请告诉我我缺了什么。提前谢谢。
string text = "0*MAO-001*20160409*20160408*Encounter Data Duplicates Report * *ENC000200800400120160407*PRO*PROD*";
//toget the value 20160409 from the above text
//this code works fine
Regex pattern = new Regex(@"([0][*]MAO[-][0][0][1].*?[*](?<Value>'d+)[*])");
Match match = pattern.Match(text);
string Value = match.Groups["Value"].Value.ToString();
//to get the value ENC000200800400120160407 from the above text
// this does not work and gives me nothing
Regex pattern2 = new Regex(@"([0][*]MAO[-][0][0][1].*?[*].*?[*].*?[*].*?[*].*?[*](?<Value2>'d+)[*])");
Match match2 = pattern.Match(text);
string Value2 = match.Groups["Value2"].Value.ToString();
看起来您的文件是用'*'分隔的。
您可以使用一个正则表达式来捕获的所有值
尝试使用
((?<values>[^'*]+)'*)
作为您的模式。
所有这些值都将被捕获到值数组中。
----更新添加c#代码----
string text = "0*MAO-001*20160409*20160408*Encounter Data Duplicates Report * *ENC000200800400120160407*PRO*PROD*";
Regex pattern = new Regex(@"(?<values>[^'*]+)'*");
var matches = pattern.Matches(text);
string Value = matches[3].Groups["values"].Captures[0];
string Value2 = matches[6].Groups["values"].Captures[0];
您需要将其用于第二个正则表达式
([0][*]MAO[-][0][0][1].*?[*].*?[*].*?[*].*?[*].*?[*](?<Value2>'w+)[*])
CCD_ 1是集合CCD_ 2中的任何字符。您仅使用搜索数字[0-9]
的'd
,而不是
C#代码
在第二次尝试使用正则表达式时,您匹配的是pattern
,而不是pattern2
。
Match match2 = pattern.Match(text);
string Value2 = match.Groups["Value2"].Value.ToString();
您也在使用match
中的Groups
,而不是match2
。
这就是为什么为变量命名对它们所代表的内容有意义的东西很重要。是的,它可能是一种"模式",但这种模式代表什么。当您使用名称模糊的变量时,会产生这样的问题。
您几乎得到了它,但您要查找的字段包含字母和数字。
这是您的第二个regex类型的固定。
'w
0
( # (1 start)
[0] [*] MAO [-] [0] [0] [1] .*? [*]
(?: .*? [*] ){4}
(?<Value2> .*? ) # (2)
[*]
) # (1 end)
为了让它不那么繁忙,这可能是更好的
(0'*MAO-001.*?'*(?:[^*]*'*){4}(?<Value2>[^*]*)'*)