2015-04-14 3 views
-1

Я попытался провести некоторое исследование, но все, что я нахожу, не охватывает то, что моя нынешняя дилемма.Обработка строк - C# и gmail

Управление строкой является основным правом? Но вот моя проблема: я захватываю тело электронной почты из gmail, тело выглядит примерно так (после удаления всего HTML-форматирования и является постоянной строкой): Имя: Testy Von Test Сотовый 1111111111 email testy @ testy

Теперь мне нужно найти строку «Имя», а затем использовать обрезку, чтобы получить полное имя, но как я могу отличить это? как я могу сказать, что мое кодирование ищет все от имени до соты и отнимает все оттуда? Я действительно пытался найти решение, поскольку, по-моему, я просто упускаю из виду какую-то логику. Если вы просто дадите мне ссылку на статью, я буду рад прочитать и применить логику сам (я не ожидаю, что кто-нибудь сделает мою работу за меня), мне просто нужно правильно подтолкнуть в правильном направлении, пожалуйста.

Благодарим вас заблаговременно.

(как редактировать, если кто-то должен следовать этот вопрос, обратите внимание на все ответы, есть куча удивительных ответов и идей)

+0

Будет ли у вашего тела электронной почты всегда имя, за которым следует числовые символы? как «Testy Von Test Cell», а затем «1111111111»? –

+0

Вы пробовали 'String.IndexOf'? – HimBromBeere

+0

Если вы чувствуете себя сильным с регулярным выражением, это будет решением вашей проблемы. Вот пример: http://www.dotnetperls.com/regex-match. –

ответ

0

Строка, которую вы видите, не очень хорошо отформатирована. За именем следует двоеточие, ячейка не ... это может стать очень сложным ...

, но простое решение с использованием подстроки.

var s = "Name : Testy Von Test Cell 1111111111 email [email protected]"; 
var name = s.Substring(
    s.IndexOf(":")+1, 
    s.IndexOf("Cell")-s.IndexOf(":")-1); 
+0

это действительно сложно, я порой имел это с «*» вместо двоеточия или пары пробелов, но я решил удалить * и нечетное форматирование должно быть простым, после того, как у меня есть мои значения. Благодарим вас за то, что я применяю ваш ответ и исследую решение комментариев на данный момент, и вернусь к вам, как только у меня появится решение. Благодарим вас за вашу помощь, я искренне благодарю вас. – Rookie

+0

Привет, XenoPuTtSs, спасибо вам за ваше решение, он заставил меня задуматься о том, что мне нужно сделать с этой строкой, поскольку порой это Cell, иногда это номер сотового телефона, поэтому, прежде чем пытаться получить значения, я попробовал чтобы получить как можно больше отклонений, тогда я запускаю метод, который заменит некоторые вещи, например, я заменю двоеточие на пробел, номер сотового телефона на ячейку и т. д. Затем я использую ваше кодирование в качестве базовой линии, чтобы получить все, что мне нужно , Большое вам спасибо за вашу помощь и ответ, я знаю, что вопрос не был прямым и ценным, вы понимаете и не торопитесь – Rookie

0

Что об этом:

int start = myString.IndexOf("Name") + "Name : ".Length; 
int len = myString.IndexOf("Cell") - start; 

string res = myString.Substring(start, len); 

Alternativly через Regex:

Regex r = new Regex("Name(.*)Cell"); 
string res = r.Matches[0].Value; 
+0

Он лучше надеется, что он никогда не получит письмо от Дейва Кэллингтона. Рекомендуем использовать LastIndexOf вместо IndexOf –

+0

hehehe, Ну, мы все можем согласиться с тем, что входная строка плохая. Мы также не знаем, является ли Cell всегда вторым полем. – XenoPuTtSs

+0

@XenoPuTtSs, конечно, этот код основан на входе от OP – HimBromBeere

0

Является ли ваше почтовое тело всегда в точном формате?

Вы можете, например, сделать так, как показано на рисунке jsfiddle.

var mailbody = 'Name : Testy Von Test Cell 1111111111 email [email protected]'; 
var nameregex = /Name(.+?)Cell/ 
var match = nameregex.exec(mailbody); 
console.log(match[1]); // Outputs " : Testy Von Test " 

В вашем примере он будет захватывать, как видно на входе в консоль, «: Testy von test». И тогда вы можете манипулировать им, как хотите. Вы также можете изменить регулярное выражение с дополнительными параметрами в зависимости от того, как ваши сообщения на почте различаются.

var mailbody = 'Name : Testy Von Test Cell 1111111111 email [email protected]'; 
var nameregex = /Name\s:\s(.+?)\sCell/ 
var match = nameregex.exec(mailbody); 
console.log(match[1]); // Outputs "Testy Von Test" 
+0

Привет, Робин, большое вам спасибо за то, что нашли время, чтобы помочь мне в моем вопросе, я понимаю, что вопрос является неопределенным, и слишком много переменных, чтобы рассмотреть, и высоко цените ваш вклад и помощь искренне. Поскольку не будет никакой гарантии, что формат всегда будет таким же, я решил использовать один предложенный XenoPuTtSs, я немного очищаю свою строку, а затем оттуда использую подстроки. Я все еще работаю над своим твердым решением (^^,). Но спасибо за вашу помощь, это было ценно и высоко ценилось. – Rookie

Смежные вопросы