我有一个文本,在文中我必须删除两个给定单词之间的竖线字符。 我已经搜索过并试过但没有任何成功,现在我可以使用一些帮助。
案文是:
Klantcode:| Aanhef en voorletters:Dhr。 A. | Tussenvoegsel en achternaam:BV | E-mailadres:test@test.nl|Straat:De Straat | Huisnummer / toevoeging:00 | Postcode:000AA | Woonplaats:PLACE | Telefoonnummer:012345678 | Bank of 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:012345678 | Huidige提供者:任何人,geen eenmalige kosten EDL / Film1 / Sport1 behouden,| geen comfort bellen。| Ingangsdatum abonnement:Zo snel mogelijk | Abonnement:Alles-in-1 Glas Standaard; *基本电视; *互联网150Mbps ; * VoIP-First Bellen |额外:* Glasmodem€0,00; * HD Digitale Ontvanger€0,00; * Aansluitkosten€0,00 |每个maand:Eerste 3 maanden€00,00,daarna€00,00; * Verzend- en administratiekosten€00,00; * Totaal eenmalig€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");
这段代码没有给我想要的结果。它不会删除管道字符。 有人可以帮我解决这个问题吗?
非常感谢你!!
答案 0 :(得分: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");
我真的不会推荐这样的东西,因为它不会将文本转移到正则表达式中。
答案 1 :(得分: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: test@test.nl|Straat: De Straat|Huisnummer / toevoeging: 00|Postcode: 000AA|Woonplaats: PLACE|Telefoonnummer: 012345678|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: 012345678|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);
答案 2 :(得分:0)
假设格式为:
text = any character other than ':' or '|'
key = text
value = text
kvp = key ':' value '|'
dictionary = {kvp}
并且您尝试删除与值不正确混合的|
,您可以使用以下正则表达式:
// 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|