2016-04-19 2 views
-2

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

Текст: Код

Заказчик: | Название и инициалы: Г-н A. | Префикс и фамилия: BV | Адрес электронной почты: [email protected]|Straat: De Straat | Номер дома/дополнение: 00 | Почтовый индекс: 000AA | Город: PLACE | Телефон:| Номер банковского счета: 00000000 | : Настоящим я разрешаю сбор одноразовых расходов и периодических расходов на подписку, включая любые дополнительные услуги для Diensten BV до уведомления о прекращении. | Информационный бюллетень: вы хотите получать ежемесячный информационный бюллетень Условия: Вы согласны с нашими условиями | Текущий номер телефона: Да | Текущий номер:| Текущий провайдер: Любой, не единовременные расходы EDL/Film1/Sport1 не сохранен, | нет комфорта. Дата начала подписки: как можно скорее | Подписка: Стандарт «все-в-1», * Основной телевизор; * Интернет 150 Мбит/с * VoIP-First Calling Extra: * Стеклянный модем € 0,00; * Цифровой приемник HD € 0,00; * Стоимость подключения € 0,00 | В месяц: первые 3 месяца € 00,00, затем € 00,00; * Стоимость доставки и администрирования € 00,00; * Итого единовременно € 00,00 | $ <

код у меня на данный момент является:

public string RemoveBetween(string baseText, string begin, string end) 
    { 
     Regex regex = new Regex(string.Format(@"\|", begin, end)); 
     return regex.Replace(baseText, string.Empty); 
    } 

o.Product = RemoveBetween(orderText, "Huidige provider:", "|Ingangsdatum"); 

Этот фрагмент кода не дает мне желаемого результата. Он не удаляет символ трубы. Есть ли кто-нибудь, кто мог бы помочь мне решить эту проблему?

спасибо, что заблаговременно !!

+3

Поскольку у вас нет значений подстановки в строке формата ('{0}'). Отлаживайте свой код и проверяйте переменные. – CodeCaster

+0

Это действительно проблема, которая вам нужна? Почему вы должны указывать начальные и конечные слова? –

+0

@Glauco Cucchiar: Мне нужно начинать и заканчивать слова, потому что текст содержит несколько символов. И символы труб между начальным и конечным словами являются единственными, которые нужно удалить. В противном случае текст будет ломаться, когда я хочу импортировать его в gridview. – Geert

ответ

0

Предполагая, что формат является:

text  = any character other than ':' or '|' 
key  = text 
value  = text 
kvp  = key ':' value '|' 
dictionary = {kvp} 

и вы пытаетесь удалить | «S которые неправильно смешиваются со значениями, вы можете использовать следующее регулярное выражение:

// Remove any '|' that follow a '|' without an intervening ':' 
Regex regex = new Regex(@"(?:\|)([^:|]*)(?=\|)"); 
return regex.Replace(baseText, "$1"); 

Пример:

a:b|c|c:d|e:f|g|l:m|n:z|h|k| -> a:bc|c:d|e:fg|l:m|n:zhk| 
+0

Большое спасибо @Mitch !! Это отлично работает. – Geert

2

Это выглядит как словарь для меня:

var s = "a:b|c:d"; 
var sKvps = s.Split('|'); 

var dict = new Dictionary<string, string>(); 
foreach (var sKvp in sKvps) 
{ 
    var parts = sKvp.Split(':', 2); 
    dict.Add(parts[0], parts[1].Trim()); 
} 

Затем вы можете заменить значения с:

dict["Huidge provider"] = "foo"; 

Для перехода в обратном направлении (в строку):

s = string.Join("|", dict.Select(kvp => $"{kvp.Key}: {kvp.Value}")); 

Чтобы исправить код, если вы предпочитаете регулярное выражение (explanation)

public string UpdateProperty(string baseText, string property, string newValue) 
{ 
    // look for "|PropertyName: value|" and split it into parts for replacement 
    Regex regex = new Regex(string.Format(@"(\|{0}:(?: ?))([^|]*)(\|)", property)); 
    return regex.Replace(baseText, string.Format("$1{0}$3", newValue)); 
} 

o.Product = UpdateProperty(orderText, "Huidige provider", "new value"); 

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

+0

Большое спасибо за вашу помощь и ответ. Но ваше решение не дает мне желаемого результата. Поскольку расщепление основано на всех трубах в тексте, трубы между заданными строками «Opmerking:» и «| Bankrekening» не удаляются. И это то, что мне нужно. Необходимо удалить только трубы между двумя заданными строками. Остальные трубы должны оставаться. – Geert

+0

В вашем примере нет ни «Opmerking:», ни «Bankrekening». Приведите пример «до» и «после». – Mitch

+0

Извините, моя ошибка. Стартовая строка - «поставщик Huidige:», конечная строка - «| Ingangsdatum». Между этими двумя строками все символы труб должны быть удалены. – Geert

0

Вам нужно бежать трубу и сними string.format (не знаю, почему именно там):

var strRegex = @"\|"; 
var myRegex = new Regex(strRegex, RegexOptions.IgnoreCase); 
var strTargetString = @"Klantcode:|Aanhef en voorletters: Dhr. A.|Tussenvoegsel en achternaam: B.V.|E-mailadres: [email protected]|Straat: De Straat|Huisnummer/toevoeging: 00|Postcode: 000AA|Woonplaats: PLACE|Telefoonnummer:|Bank- of gironummer: 00000000|Machtigingen: Ik verleen hierbij tot wederopzegging machtiging voor de incasso van de eenmalige kosten en periodieke abonnementskosten inclusief eventuele aanvullende diensten aan Diensten BV.|Nieuwsbrief: U wilt de maandelijkse nieuwsbrief ontvangen|Voorwaarden: U bent akkoord met onze voorwaarden|Huidig telefoonnummer behouden: Ja|Huidige nummer:|Huidige provider: Anybody, geen eenmalige kosten EDL/Film1/Sport1 behouden, |geen comfort bellen.|Ingangsdatum abonnement: Zo snel mogelijk|Abonnement:Alles-in-1 Glas Standaard;* Basic TV;* Internet 150Mbps;* VoIP-First Bellen|Extra:* Glasmodem € 0,00;* HD Digitale Ontvanger € 0,00;* Aansluitkosten € 0,00|Per maand: Eerste 3 maanden € 00,00, daarna € 00,00;* Verzend- en administratiekosten € 00,00;* Totaal eenmalig € 00,00|$<"; 

return myRegex.Replace(strTargetString, string.Empty); 
+0

Большое спасибо за вашу помощь. Ваше решение удаляет все тексты в тексте. И это не желаемый результат. – Geert

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