美好的一天,
有人可以帮助我朝着正确的方向前进。
我有一个字符串:
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]
[]内的变量是不同的变量。
答案 0 :(得分:2)
这应该这样做:
Task (?<number>[0-9]+):(?<message>(?:[^\n]+|\n(?!Task [0-9]+:))+)
根据您的Waffle Iron示例,它允许消息换行。
如果数字总是五位数,您可以使用[0-9]{5}
代替[0-9]+
它使用命名捕获组((?<name>
.. )
位)来表示数字和消息,但当然可以使用普通捕获组,或者如果你要拆分它们则根本不使用单独排列,例如:
Task [0-9]+:(?:[^\n]+|\n(?!Task [0-9]+:))+
这些表达式的关键部分(匹配消息而不匹配下一个任务)分解为:
(?:
[^\n]+
|
\n(?!Task [0-9]+:)
)+
第一个选项匹配尽可能多的非换行符,如果失败,它会查找一个新行,后面没有新任务,然后重复多次(至少一次),直到它消耗了这条消息。 (如果邮件可以为空,请将最终+
更改为*
)
答案 1 :(得分:2)
List<String> output=Regex.Matches(input,@"(?s)(?i)\bTask\b\s*\d+:.*?(?=\bTask\b|$)")
.Cast<Match>()
.Select(x=>x.Value)
.ToList();
答案 2 :(得分:0)
正则表达式的优点是,它将过滤所有坏行。因为它们与模式不匹配。
类似于:^Task\s\d+:.+
会做