C # .Net - Как мне разбить строку, которая варьируется в словах и символах в нем? - PullRequest
0 голосов
/ 02 июля 2011

Мне нужно разделить некоторые строки, но количество символов и положение изменится. Это довольно просто в PHP, но кажется более сложным в C #.

Это результаты поиска борзых в Великобритании.

У меня есть эти строки в массиве, Мне нужно извлечь почти все из каждой строки , поэтому мне нужно быстрое и простое решение для этого.Мне нужно иметь возможность извлекать дату, время, курс (Crayfd), расстояние (540 м), а также только победителя (без «Победитель (ей): необходимо удалить это)», а также marketID из URL.

Итак, какие встроенные функции c # лучше всего подходят для всего этого? , небольшой пример некоторых функций c # и их использование было бы замечательно.Также было бы неплохо небольшое объяснение.

[0, 0] = "BAGS cards / Crayfd 2nd Jul - 12:58 S6 540m settled"
[0, 1] = "Winner(s):  Springtown Mary"
[0, 2] = "http://rss.betfair.com/Index.aspx?format=html&sportID=4339&marketID=103165302"

[1, 0] = "BAGS cards / Crayfd 2nd Jul - 12:58 TO BE PLACED settled"
[1, 1] = "Winner(s):  Black Hawk Boy,  Springtown Mary"
[1, 2] = "http://rss.betfair.com/Index.aspx?format=html&sportID=4339&marketID=103165303"

[2, 0] = "Forecast Betting / Crayfd (FC) 2nd July - 12:58 Forecast settled"
[2, 1] = "Winner(s): 1 - 3"
[2, 2] = "http://rss.betfair.com/Index.aspx?format=html&sportID=4339&marketID=103164570"

[3, 0] = "BAGS cards / Romfd 2nd Jul - 12:49 A2 400m settled"
[3, 1] = "Winner(s):  Come On Rosie"
[3, 2] = "http://rss.betfair.com/Index.aspx?format=html&sportID=4339&marketID=103165272"

Ответы [ 3 ]

2 голосов
/ 02 июля 2011

Я бы предложил использовать String.Split , String. [Last] IndexOf , String.Substring и расширения LINQ (простые, например, .Last(), просто для упрощения вещей).например, если URL-адрес находится в string url, и можно с уверенностью предположить, что marketId всегда находится в конце, например:

int marketId = int.Parse(url.Split('=').Last());

Или получить данные из первой строки, если она называется courseEtc:

string[] courseEtcParts = courseEtc.Split('/', '-');
string[] lastParts = courseEtcParts.Split();
string time = lastParts[0];

А чтобы искать что-то вроде расстояния, вы можете использовать регулярные выражения.Что-то вроде [0-9]+m.

2 голосов
/ 02 июля 2011

Как правило, я бы описал такую ​​проблему следующим образом:

Сначала определите, действительно ли вам нужно разбить строку или вам нужно извлечь от него.Разделение кажется подходящим, когда вы хотите получить несколько похожих вещей, т.е.вещи с содержимым того же рода (например, списки).Извлечение кажется более подходящим, когда отдельные сегменты содержат разные вещи.В вашем случае последнее представляется более вероятным.

Если бы вы разбили строк, вы могли бы использовать два метода:

  • string.Splitесли каждый сегмент разделен одинаковыми символами.

  • Regex.Split, если разделители сегментов не всегда одинаковы.

Для извлечения вы почти всегда будете получать регулярные выражения, т.е.System.Text.RegularExpressions.Regex класс .Вам нужно найти один или несколько шаблонов, которые точно соответствуют вашим требованиям.

Чтобы фактически извлечь текст с помощью регулярного выражения, вы можете использовать группы захвата и захвата.Используйте нормальные ( ) круглые скобки для захвата текста, соответствующего определенному шаблону;используйте не захватывающие скобки (?: ) для всего остального.Например,

A (B) (?:C) D

B будет захвачено в группе и доступно, например, через regex.Groups[1].Value, в то время как C не будет захвачено.

0 голосов
/ 02 июля 2011

Не совсем понятно, каковы ваши требования, но если вы разделяете строки, моей первой мыслью было бы использовать Regex:

http://msdn.microsoft.com/en-us/library/30wbz966(v=vs.71).aspx

Будет ли это работать для вас? Надеюсь это поможет, John

...