【问题标题】:Validation using Regular Expression in C#.net applicaiton在 C#.net 应用程序中使用正则表达式进行验证
【发布时间】:2011-06-21 15:38:52
【问题描述】:

我们想要验证输入的 .DAT 文件记录是否包含所提供的分隔符。

在我们的 .net 应用程序中,我们可以根据提供的分隔符解析输入文件,其中所有分隔符都是正确的, 例如:“测试”、“数据”、“案例信息”

文件中的以上记录/行将成功解析,现在我们对格式如下的行/记录有问题:

"测试",数据,"案例信息" (你可以看到没有用“数据”值包围的文本限定符,因此在解析文件中的数据时会产生问题。

因此我们决定使用正则表达式来查找没有被 TextQualifier 包围的有问题的值。

为了解决这个问题,我们在下面创建了 RegEx 来查找有问题的值, \x2C([^\x22].*?[^\x22])\x2C

使用上述正则表达式,它适用于第一个和最后一个字段之间的记录。

"Test",data,"CaseInforation" -> 正则表达式成功解析此记录并提供数据作为输出字段有问题。

"Test","data",CaseInforation -> 此记录正则表达式与最后一个值不匹配。

谁能帮助我们更正匹配第一个或最后一个值的正则表达式。

谢谢。

【问题讨论】:

  • 我已经发布了一个可能会满足您需求的解决方案。

标签: .net regex


【解决方案1】:

^(?:(?:"((?:""|[^"])+)"|([^,]*))(?:$|,))+$ 将匹配整行,然后您可以使用 match.Groups[1].Captures 获取数据(不带引号)。另外,我让"My name is ""in quotes""" 成为一个有效的字符串。

string mystring = "\"Test\",\"data\",\"CaseInforation\"";
MatchCollection matches = Regex.Matches(mystring, "^(?:(?:\"((?:\"\"|[^\"])+)\"|([^,]*))(?:$|,))+$");
match[0].Value = "Test","data","CaseInforation"
match[0].Groups[0].Value => "Test","data","CaseInforation"
match[0].Groups[0].Captures[0].Value => "Test","data","CaseInforation"
match[0].Groups[1].Value => CaseInforation
match[0].Groups[1].Captures[0].Value => Test
match[0].Groups[1].Captures[1].Value => data
match[0].Groups[1].Captures[2].Value => CaseInforation

【讨论】:

    【解决方案2】:

    类似的东西?

    /^"\w+","?(.+)"?,"\w+"$/
    

    【讨论】:

      【解决方案3】:

      一个简单的[^\",]+ 应该为每个值提供一个匹配项,只要任何 " 和 , 都在值之间。如果值内有任何值,则该值将被拆分为两个。

      所以是这样的:

      foreach(Match match in Regex.Matches(data, "[^\",]+"))
      {
          Console.WriteLine(match.Value);//or whatever
      }
      

      如果你有"Test",data,"CaseIn"foration",你会得到Test、data、CaseIn和foration。

      【讨论】:

      • 鉴于 regEx 可以很好地匹配引号中的字符串。但是有什么方法可以直接获取与提供的 string.ex 不匹配的值。 “ID”,“文件名”,“主题”,来自(对于这个提供的字符串正则表达式匹配所有值包含“”,意思是“ID”,“文件名”,“主题”)现在有什么方法我们只是得到不从上面的字符串中匹配的字符串
      猜你喜欢
      • 2020-02-18
      • 2021-10-17
      • 1970-01-01
      • 2014-12-25
      • 2014-04-21
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多