Самый простой способ получить каждое слово электронной почты (текстовый файл) в массив C#
Я пытаюсь создать фишинговый сканер для проекта класса, и я застрял при попытке сохранить электронную почту, сохраненную в текстовом файле, для правильного копирования в массив для последующей обработки. Я хочу, чтобы каждое слово было в своем собственном индексе массива.
Вот мой образец электронного письма:
Subject: Insufficient Funds Notice
Date: September 25, 2013
Insufficient Funds Notice
Unfortunately, on 09/25/2013 your available balance in your Wells Fargo account XXXXXX4653 was insufficient to cover one or more of your checks, Debit Card purchases, or other transactions.
An important notice regarding one or more of your payments is now available in your Messages & Alerts inbox.
To read the message, click here, and first confirm your identity.
Please make deposits to cover your payments, fees, and any other withdrawals or transactions you have initiated. If you have already taken care of this, please disregard this notice.
We appreciate your business and thank you for your prompt attention to this matter.
If you have questions after reading the notice in your inbox, please refer to the contact information in the notice. Please do not reply to this automated email.
Sincerely,
Wells Fargo Online Customer Service
wellsfargo.com | Fraud Information Center
4f57e44c-5d00-4673-8eae-9123909604b6
Я не хочу никаких знаков препинания, все, что мне нужно, это слова и цифры.
Вот код, который я написал для него до сих пор.
StreamReader sr1 = new StreamReader(lblDisplaySelectedFilePath.Text);
string line = sr1.ReadToEnd();
words = line.Split(' ');
int wordslowercount = 0;
foreach (string word in words)
{
words[wordslowercount] = word.ToLower();
wordslowercount = wordslowercount + 1;
}
Проблема с приведенным выше кодом заключается в том, что я продолжаю получать слова, которые связаны друг с другом и / или имеют в массиве "\r" или "\n". Вот пример того, что в массиве я не хочу.
"notice\r\ndate:"
не хочу \r, \n или:. Также два слова должны быть в разных индексах.
3 ответа
Регулярное выражение \W
позволит вам разбить вашу строку и создать список слов. При этом используются границы слов, поэтому они не будут включать пунктуацию.
Regex.Split(inputString, "\\W").Where(x => !string.IsNullOrWhiteSpace(x));
using System;
using System.Text.RegularExpressions;
public class Example
{
static string CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
try {
return Regex.Replace(strIn, @"[^\w\.@-]", "",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
}
// If we timeout when replacing invalid characters,
// we should return Empty.
catch (RegexMatchTimeoutException) {
return String.Empty;
}
}
}
С помощью line.Split(null)
разделится на пустое пространство. Из документации по методу C# String.Split:
Если параметр разделителя имеет значение NULL или не содержит символов, символами пробела считаются разделители. Пробельные символы определяются стандартом Unicode и возвращают true, если они передаются методу Char.IsWhiteSpace.