【问题标题】:string split with delimeters remain in strings result array, how? c#带分隔符的字符串拆分保留在字符串结果数组中,如何? C#
【发布时间】:2013-01-10 17:09:32
【问题描述】:

假设我有这个行字符串:

'''Sir Winston Leonard Spencer-Churchill''', {{Post-nominals|post-noms=[[Knight of the Garter|KG]]

我已经在我的代码中使用没有空结果的字符串拆分,但我现在想要结果 该字符串将是:

[0] "'''"
[1] “温斯顿·伦纳德·斯宾塞-丘吉尔爵士”
[2] "'''"
[3] ", "
[4]“{{”
[5] “后名词|后名词=”
[6]“[[”
[7] “嘉德骑士|KG”
[8] "]]"

等等,所以基本上我的分隔符是{"'''","{{","}}","[[","]]"} 只是需要它的方式,我稍后会编辑它。如果不使用正则表达式会更好。

【问题讨论】:

  • 你为什么不想使用正则表达式?
  • @Servy regex.Split 也删除了分隔符
  • 通常它会与stackoverflow.com/questions/2910536/… 重复,但您明确需要其他解决方案...
  • @StenPetrov 是的,大多数其他拆分机制也是如此。但是,如果有人按照要求提出解决问题的方法并使用正则表达式,我看不到问题所在。显然,仅调用Split(无论是否来自正则表达式)并传入提供的分隔符是无法解决问题的。
  • @k-man “未知”是答案所在,你可以想出一些笨拙的方法来做这件事,而不是花几个小时来学习一项不错的新技术;几个月后,有人会查看您的代码,甚至可能是您,并想知道这里到底做了什么。下面 2kay 的答案 (+1'd) 中的正则表达式非常简单,基本上是它们之间的分隔符和管道 - 不会比 3 行代码更简单。

标签: c# string split delimiter


【解决方案1】:

使用Regex

string input = "'''Sir Winston Leonard Spencer-Churchill''', {{Post-nominals|post-noms=[[Knight of the Garter|KG]]";
string pattern = @"('''|\{\{|\}\}|\[\[|\]\])";
string[] result = Regex.Split(input, pattern);

【讨论】:

  • 你只需要删除空的整体;除了它匹配请求的输出。
  • +1 几乎是准确的结果......但 OP 出于某种原因想要不喜欢解决方案。
  • 好的,谢谢,我会接受的,因为现在我可以理解语法了,我希望我以后的更改不会太复杂,谢谢。
【解决方案2】:

使用这个正则表达式(?<=^?'''|\{\{|\[\[|\]\]|\}\})(.+?)(?=$?'''|\{\{|\[\[|\]\]|\}\})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2012-01-16
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多