首页 > 解决方案 > 正则表达式无法识别字符串 C#

问题描述

我正在使用正则表达式类。我试图弄清楚一个字符串在另一个字符串中有多少个常见匹配项。

情况如下:

MainWindow.DetailBLL.Name = "Top Senders By Total Threat Messages"
String detailName = MainWindow.DetailBLL.Name;

摘自:

MainWindow = Window Class
DetailBLL = Class
Name = Variable

public String Name
{
    get { return _Name; }
    set { _Name = value; }
}

CharacterReplacement(openedFile) = "Incoming Mail Domains Top Senders By Total Threat Messages"
String fileName = CharacterReplacement(openedFile); 

摘自:

OpenFileDialog openedFile = new OpenFileDialog();

Incoming_Mail_Domains_Top_Senders_by_Graymail_Messages_RawData.csv

private String CharacterReplacement(OpenFileDialog file)
{
    String input = file.SafeFileName;
    String output = input.Replace("_", " ").Replace("RawData", " ").Replace("by",      "By").Replace(".csv", " ");

    //output: "Incoming Mail Domains Top Senders By Graymail Messages"
    return output;
}

此方法采用文件名(.csv 文件的名称)并将其转换为可读字符串,并按所示返回。

正则表达式类的使用:

String source = detailName;

String searchPattern = fileName;

第一次尝试:不起作用

int count = Regex.Matches(searchPattern, source).Count;

或不起作用

int count = Regex.Matches(fileName, detailName).Count;

if (count > 0)
{
    System.Windows.MessageBox.Show("Match!");
}

第二次尝试:不起作用

foreach (Match match in Regex.Matches(fileName, detailName))

或不起作用

foreach (Match match in Regex.Matches(searchPattern, source))
{
    System.Windows.MessageBox.Show("Matches: " + counter++);
}

我注意到了一些事情,Regex 不是这样工作的。变量没有识别:

String source = detailName;

String searchPattern = fileName;

仅当变量如下时才有效:

String source = "Top Senders By Total Threat Messages";

String searchPattern = "Incoming Mail Domains Top Senders By Total Threat Messages";

但是,这对我不起作用,我需要它们评估为隐式(非文字)字符串,而不是显式(文字)字符串,导致变量每次都发生变化。

请问有办法吗?

标签: c#regexstringcastingpattern-matching

解决方案


好吧,首先-您可能不需要正则表达式(我仍然建议阅读有关正则表达式的信息https://www.regular-expressions.info/)。

我想您需要计算两个字符串中包含多少个单词。您的评论两个问题都没有说明您是想计算同一个单词两次还是一次。

在这里您可以找到基本示例:

using System;
using System.Linq;

namespace SearchLinq
{
    class Program
    {
        static void Main(string[] args)
        {
            string source = "Top Senders By Total Threat Messages";
            string find = "Incoming Mail Domains Top Senders By Total Threat Messages";

            // first possible solution
            int result = 0;
            foreach (string word in find.Split(' '))
            {
                if (source.Contains(word))
                {
                    result++;
                }
            }
            Console.WriteLine(result);

            // second possible solution
            int result2 = find.Split(' ').Count(w => source.Contains(w));
            Console.WriteLine(result2);
        }
    }
}

推荐阅读