C# 使用字符串制作或正则表达式分解字符串

C# 使用字符串制作或正则表达式分解字符串,c#,regex,string,C#,Regex,String,你好 有人能帮我找到正确的方向吗 我有一个字符串: Task 10001:Bring cooldrinks Task 10005:Waffle Iron, this should of course be cleaned Task 10006:Remember Wife Task 10000:Leave children 如何将其分解,以便我可以将每个任务都粘贴到如下列表中: List(0) = Task 10001: Bring cooldrinks List(1) = Task 1

你好

有人能帮我找到正确的方向吗

我有一个字符串:

Task 10001:Bring cooldrinks
Task 10005:Waffle Iron,
this should of course be cleaned    
Task 10006:Remember Wife
Task 10000:Leave children
如何将其分解,以便我可以将每个任务都粘贴到如下列表中:

List(0) = Task 10001: Bring cooldrinks
List(1) = Task 10005:Waffle Iron,this should of course be cleaned    
List(2) = Task 10006: Remember Wife
List(3) = Task 10000: Leave children
我总是会收到类似字符串的任务[number]:[Message]


[]中的变量是不同的。

正则表达式的优点是,它可以过滤所有不好的行。因为它们与模式不匹配


类似于:
^Task\s\d+:.++
就可以了

正则表达式的优点是,它可以过滤所有不好的行。因为它们与模式不匹配

类似于:
^Task\s\d+:。++
就可以了

这样就可以了:

Task (?<number>[0-9]+):(?<message>(?:[^\n]+|\n(?!Task [0-9]+:))+)

这些表达式的关键部分(匹配消息而不匹配下一个任务)是:

(?:
    [^\n]+
|
    \n(?!Task [0-9]+:)
)+
第一个备选方案尽可能多地匹配非换行符,如果失败,它将查找未后跟新任务的换行符,然后尽可能多地重复此操作(至少一次),直到它已使用该消息。(如果消息可以为空,请将最后的
+
更改为
*

这应该可以做到:

Task (?<number>[0-9]+):(?<message>(?:[^\n]+|\n(?!Task [0-9]+:))+)

这些表达式的关键部分(匹配消息而不匹配下一个任务)是:

(?:
    [^\n]+
|
    \n(?!Task [0-9]+:)
)+
第一个备选方案尽可能多地匹配非换行符,如果失败,它将查找未后跟新任务的换行符,然后尽可能多地重复此操作(至少一次),直到它已使用该消息。(如果消息可以为空,请将最后的
+
更改为
*

列表输出=Regex.Matches(输入,@“(?s)(?i)\bTask\b\s*\d+:.*(?=\bTask\b |$))
.Cast()
.选择(x=>x.Value)
.ToList();
List output=Regex.Matches(输入,@“(?s)(?i)\bTask\b\s*\d+:*?(?=\bTask\b |$))
.Cast()
.选择(x=>x.Value)
.ToList();

Jeeze这些正则表达式,谢谢你的回答。我需要研究你的解释。没问题,如果有什么不合理的地方,请告诉我。顺便说一句,嘲笑这些正则表达式,谢谢你的回答。我需要研究你的解释。没问题,如果有任何不合理的地方,请告诉我。顺便说一句,对于像任务10008:查找多任务软件这样的内容,这将失败。另外,做一个懒惰的
*?
匹配通常比较慢(因此我选择了否定类/交替路线)。@PeterBoughton不,这不会失败。。这似乎对我的pcEh很有效?它正在执行一个惰性的
*?
任务,对
任务进行不区分大小写的前瞻,因此它将匹配
任务10008:Find multi
,而不是使用整个消息。这正是我想要的。作为一个附加问题:这个正则表达式是否可以更改为可以处理其他固定文本。例如,如果单词不仅是“Task”,而且是“Bug”,则可以执行完全相同的操作。是否可以执行此操作,或者我必须将它们分开计算,然后将它们添加到1个列表中的2个列表中?@user1702369将
任务更改为
(任务| Bug)
.
|
意味着,对于任务10008:查找多任务软件这样的内容,ORThis将失败。此外,进行惰性的
*?
匹配通常比较慢(因此我选择了否定类/替代路线)。@PeterBoughton不,不会失败。这似乎对我的pcEh很有效?它正在执行一个惰性的
*?
任务,对
任务进行不区分大小写的前瞻,因此它将匹配
任务10008:Find multi
,而不是使用整个消息。这正是我想要的。作为一个附加问题:这个正则表达式是否可以更改为可以处理其他固定文本。例如,如果单词不仅是“Task”,而且是“Bug”,则可以执行完全相同的操作。是否可以执行此操作,或者我必须将它们分开计算,然后将它们添加到1个列表中的2个列表中?@user1702369将
任务更改为
(任务| Bug)
|
表示或