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();
看
详细信息
-1个或多个单词字符(字母/数字/下划线),然后重复0个或多个\w+(?:-\w+)*:
和1个以上单词字符-
-任何0个或更多字符,尽可能少*?
-直到第一次出现(?=\s+(?:\w+(?:-\w+*:$)
-0个或更多空格\s*
-1个或多个单词字符(字母/数字/下划线),然后重复0个或多个(?:\w+(?:-\w+)*:
和1个以上单词字符,然后是冒号-
-或|
-字符串结尾$
)
请参阅。
\w+:.*(?=\s+\w+:|$)
几乎可以满足我的需要。让我来玩玩这个。谢谢你对每一个魔法的详细解释。正则表达式真的很神奇。谢谢。我可以修改我的问题,使之更符合我的真实例子吗。它只是将单词从Foo:Bar:FooBar:
更改为Foo:Bar:FooBar:
?@gilliduck,几乎是一样的<代码>\w+(?:-\w+):*(?=\s+\w+(?:-\w+):$)或\w+(?:-\w+)*:*。(?=\s+\w+(?:-\w+*:$)
太完美了。这正适合我。非常感谢。