c# - 搜索文件,只返回重复的字符串

标签 c# regex string csv

目前正在从事一个 parking 场项目。我有一个 csv 文件,其中包含有关汽车牌照的信息字符串。我已经使用正则表达式返回了 90% 的车牌,但是较短的个性化车牌没有正确返回:即“AA12”返回为“AA12BC”,因为它适合另一个正则表达式。

每个字符串都有两个车牌实例,有没有办法只返回证明正则表达式正确的字符串和两个车牌实例。

到目前为止的代码:

//开始

        using (TextReader reader = File.OpenText(@"C:\Users\user\documents\regdata.csv"))
        {
            List<string> lines = new List<string>();
            string pattern = @"[A-Z]{3}[0-9]{3}";
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                lines.Add(line);
            }

            List<string> regExs = new List<string>();

            regExs.Add(@"[A-Z]{3}[0-9]{3}");
            regExs.Add(@"[A-Z]{2}[0-9]{2}[A-Z]{3}");
            regExs.Add(@"[A-Z]{1}[0-9]{3}[A-Z]{3}");
            regExs.Add(@"[A-Z]{1}[0-9]{2}[A-Z]{3}");
            regExs.Add(@"[A-Z]{1}[0-9]{1}[A-Z]{3}");
            regExs.Add(@"[A-Z]{3}[0-9]{2,3}");
            regExs.Add(@"[A-Z]{2}[0-9]{4}");
            regExs.Add(@"[A-Z]{3}[0-9]{2}");
            regExs.Add(@"[A-Z]{2}[0-9]{2}[A-Z]{3}");





                using (StreamWriter writer = new StreamWriter(@"C: \Users\user\Desktop\usersNotes\plates.csv"))
            {

                foreach (var l in lines.Select(x => x.Split(',')[2]))
                {

                    string result = "";
                    foreach (var r in regExs)
                    {

                        Regex myRegex = new Regex(r);

                        Match m = myRegex.Match(l);
                        if (m.Success)
                        {
                            result = m.Value;
                            break;
                        }
                    }


                    writer.WriteLine(l + "," + result);

                }

谢谢

最佳答案

这应该可以为您完成。按照我的理解,我继续为您编写(我认为)整个解决方案。我制作了一个正则表达式列表而不是一个字符串列表;这样您就不必在每个循环中构建和拆除每个 Regex 对象。

假设:(1) 板 block 从来没有 "或 ,并且 (2) 板 block 不会出现超过两次。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace DupeOnly {
public partial class Form1 : Form{
   public Form1(){
      InitializeComponent();
   }
   private void button1_Click(object sender, EventArgs e){
      string zRegData = File.ReadAllText(@"C:\Users\user\documents\regdata.csv");
      HashSet<string> hsRegData = new HashSet<string>(); 

  bool tfFirst = true;

  string[] zAllPlateData = zRegData.Split(',');  //License plates don't have comma's

  List<Regex> rxList = new List<Regex>();
  rxList.Add(new Regex(@"[A-Z]{3}[0-9]{3}"));
  rxList.Add(new Regex(@"[A-Z]{2}[0-9]{2}[A-Z]{3}"));
  rxList.Add(new Regex(@"[A-Z]{1}[0-9]{3}[A-Z]{3}"));
  rxList.Add(new Regex(@"[A-Z]{1}[0-9]{2}[A-Z]{3}"));
  rxList.Add(new Regex(@"[A-Z]{1}[0-9]{1}[A-Z]{3}"));
  rxList.Add(new Regex(@"[A-Z]{3}[0-9]{2,3}"));
  rxList.Add(new Regex(@"[A-Z]{2}[0-9]{4}"));
  rxList.Add(new Regex(@"[A-Z]{3}[0-9]{2}"));
  rxList.Add(new Regex(@"[A-Z]{2}[0-9]{2}[A-Z]{3}"));
  Match m;

  using (StreamWriter sw = new StreamWriter(@"C: \Users\user\Desktop\usersNotes\plates.csv")){
     for(int Q = 0; Q < zAllPlateData.Length; Q++){
        if(hsRegData.Add(zAllPlateData[Q]) == false){

           //At this point we know it is a duplicate, must still match a check pattern
           foreach(Regex rx in rxList){
              m = rx.Match(zAllPlateData[Q]);
              if(m.Success){

                 if(tfFirst){
                    tfFirst = false;

                    sw.Write(zAllPlateData[Q]);  //First plate doesn't take a comma
                 }
                 else{
                    sw.Write("," + zAllPlateData[Q]);  //Comma delimit subsequent plates
                 }
                 break;
              }
           }
        }
     }
      }
   }
}
}

关于c# - 搜索文件,只返回重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34157722/

相关文章:

regex - 'if' 语句中的 Perl 正则表达式 [语法]

java - 在 Java 中使用 "OR"运算符

Python Decimal to string 产生奇怪的科学记数法

c# - 如何创建双向数据绑定(bind)代理?

regex - 替换 R 中的文本时出错

c# - RGB 到 HSV 的转换导致图像嘈杂

javascript - JavaScript 中的正则表达式

c - C语言只打印字符串中以指定字母开头的单词

c# - 按总数分组

c# - 渲染不同的局部 View onclick 不同的按钮