C# 从一个特定单词拆分为另一个特定单词

C# 从一个特定单词拆分为另一个特定单词,c#,regex,C#,Regex,假设字符串类似于Foo:Some Text Bar:Some Other Text FooBar:More Text,目标是将其拆分为: Foo: Some Text Bar: Some Other Text FooBar: Even More Text 我根本搞不懂它的正则表达式。我可以根据我想要的单词来拆分它,比如(Foo:)|(Bar:)|(FooBar:),但是我不知道如何从每个组的开头到下一组的开头(或者如果是最后一组,则是文本的结尾)。可以使用Regex.split来拆分字符串 (

假设字符串类似于
Foo:Some Text Bar:Some Other Text FooBar:More Text
,目标是将其拆分为:

Foo: Some Text
Bar: Some Other Text
FooBar: Even More Text

我根本搞不懂它的正则表达式。我可以根据我想要的单词来拆分它,比如
(Foo:)|(Bar:)|(FooBar:)
,但是我不知道如何从每个组的开头到下一组的开头(或者如果是最后一组,则是文本的结尾)。

可以使用
Regex.split
来拆分字符串

(?<!^)\s+(?=\b(?:Bar|Foo(?:Bar)?):)
输出:

Foo:一些文本
酒吧:其他一些文本
FooBar:更多的文本
另一个想法:将冒号前的任何单词与下一个单词进行匹配,并在其后面加上一个

var matches=Regex.matches(s,@“\w+(?:-\w+):*:*?(?=\s*(?:\w+)(?:-\w+*:|$)”,RegexOptions.Singleline)
.Cast()
.选择(x=>x.Value)
.ToList();

详细信息

  • \w+(?:-\w+)*:
    -1个或多个单词字符(字母/数字/下划线),然后重复0个或多个
    -
    和1个以上单词字符
  • *?
    -任何0个或更多字符,尽可能少
  • (?=\s+(?:\w+(?:-\w+*:$)
    -直到第一次出现
    • \s*
      -0个或更多空格
      • (?:\w+(?:-\w+)*:
        -1个或多个单词字符(字母/数字/下划线),然后重复0个或多个
        -
        和1个以上单词字符,然后是冒号
    • |
      -或
      • $
        -字符串结尾

请参阅。

\w+:.*(?=\s+\w+:|$)
几乎可以满足我的需要。让我来玩玩这个。谢谢你对每一个魔法的详细解释。正则表达式真的很神奇。谢谢。我可以修改我的问题,使之更符合我的真实例子吗。它只是将单词从
Foo:Bar:FooBar:
更改为
Foo:Bar:FooBar:
?@gilliduck,几乎是一样的<代码>\w+(?:-\w+):*(?=\s+\w+(?:-\w+):$)或
\w+(?:-\w+)*:*。(?=\s+\w+(?:-\w+*:$)
太完美了。这正适合我。非常感谢。