【问题标题】:C# Regex.Split (How to build)C# Regex.Split(如何构建)
【发布时间】:2016-10-06 11:46:01
【问题描述】:

我正在尝试像这样拆分行:

root.MediaClip.MaxGroups=10
root.MediaClip.M0.Name=Burglar_Alarm_Short
root.MediaClip.M0.Location=/etc/audioclips/Burglar_Alarm_Short_8bit_32kHz_mono_PCM-16bit-little.wav

但我不知道如何在“=”之后停止拆分。

这里拆分应该有的结果:

root
MediaClip
MaxGroups=10

root
MediaClip
M0
Name=Burglar_Alarm_Short

root
MediaClip
M0
Location=/etc/audioclips/Burglar_Alarm_Short_8bit_32kHz_mono_PCM-16bit-little.wav

问题是以文件扩展名结尾的行。但是在“=”到达之后,就不需要额外的拆分了。

【问题讨论】:

    标签: c# regex split


    【解决方案1】:

    您可以使用基于正则表达式的拆分来仅拆分后跟除= 之外的任何字符,然后是= 或字符串结尾且前面没有= 的点:

    (?<=^[^=]*)\.(?=[^=]*(?:=|$))
    

    请参阅regex demo

    (?&lt;=^[^=]*) 是一个正向lookbehind,要求点出现在字符串开头 (^) 之后,后跟除= 之外的 0+ 个字符,(?=[^=]*(?:=|$) 正向lookahead 还需要@987654330 @ 或字符串结尾(参见 (?:=|$) 非捕获组)在除 = 之外的 0+ 个字符之后。

    在 C# 中:

    var chunks = Regex.Split(str, @"(?<=^[^=]*)\.(?=[^=]*(?:=|$))");
    

    【讨论】:

    • 好的,非常感谢!但是现在我发现我忘了提到根本没有“=”的情况。
    • 没问题,只需添加一个字符串结尾替代前瞻:(?&lt;=^[^=]*)\.(?=[^=]*(?:=|$)),我更新了答案以反映此要求。
    • 谢谢! :) 如果您一年只使用 1 或 2 次正则表达式,那就不太容易了。我真的需要深入研究一些教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    相关资源
    最近更新 更多