在C#中使用Regex在ConcatenatedFileNamesLikeThis之间插入空格?

我们正在尝试从SSRS报告文件名生成用户友好的报告名称,这些名称不能在名称中包含空格,但应该可以使用正则表达式从报告名称生成它们以扫描大写/ nocaps边界和alpha /数字边界。 然而,所有上限都使事情复杂化。 例如:

ListOfMembers => List Of Members Weekly123Report => Weekly 123 Report MembersOfIEETeam => Members Of IEE Team 

所以我认为这是最小的规则集;

 (a-z0-9)(AZ) gets replaced with "$1 $2" (AZ)?(AZ)(az) gets replaced with "$1$2 $3" (A-Za-z)(0-9) gets replaced with "$1 $2" (0-9)(A-Za-z) gets replaced with "$1 $2" 

有可能一下子做到这一点还是需要多次通过? 假设我们有一个报告文件名,例如:

 WeeklyIEEReportWC20090103SortedByDate 

我已经看到SSRS在处理图表上的系列名称时执行类似的操作,它会从连接版本中动态生成它们。

任何信息赞赏! 🙂

我的解释和解决方案:

 var input = "WeeklyIEEReportWC20090103SortedByDateXFoo3W3CBar4x"; var re = @"(?!^)(?:[AZ](?:[az]+|(?:[AZ\d](?![az]))*)|\d+)"; string value = Regex.Replace(input, re, " $0"); 

结果: Weekly IEE Report WC20090103 Sorted By Date X Foo 3 W3C Bar 4x

编辑2个固定的IEE

 var input = @"WeeklyIEEReportWC20090103SortedByDate"; string p = @"(?<=[AZ])(?=[AZ][az])|(?<=[a-z0-9])(?=[AZ])|(?<=[a-zA-Z])(?=[0-9])"; string value = Regex.Replace(input, p, " "); 

生成Members Of IEE TeamWeekly IEE Report WC 20090103 Sorted By Date提供的样本的Weekly IEE Report WC 20090103 Sorted By Date