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();

Regex使用C#从字符串中获取值

看起来您的文件是用'*'分隔的。

您可以使用一个正则表达式来捕获的所有值

尝试使用

((?<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类型的固定。

'w0

 (                             # (1 start)
      [0] [*] MAO [-] [0] [0] [1] .*? [*] 
      (?: .*? [*] ){4}
      (?<Value2> .*? )              # (2)
      [*] 
 )                             # (1 end)

为了让它不那么繁忙,这可能是更好的

(0'*MAO-001.*?'*(?:[^*]*'*){4}(?<Value2>[^*]*)'*)