Regex не распознает строку C # - PullRequest
0 голосов
/ 24 мая 2018

Я работаю с Regex Class.Я пытаюсь выяснить, сколько общих совпадений имеет строка в другой строке.

Вот ситуация:

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) и преобразует его в читаемую строку, возвращаяэто как изображено.

Использование класса Regex:

String source = detailName;

String searchPattern = fileName;

1-я попытка: не работает

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

или не работает

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

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

2-я попытка: не работает

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";

Но это не сработает для меня, мне нужно, чтобы они оценивались какнеявная (не-литеральная) строка, не такая, как явная (литеральная), приводящая к тому, что переменные меняются каждый раз.

Есть способ добраться до нее, пожалуйста?

1 Ответ

0 голосов
/ 03 июня 2018

Ну, во-первых, вам, вероятно, не нужно регулярное выражение (все же я рекомендую прочитать о регулярном выражении 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);
        }
    }
}
...