在C#中使用Regex在连接的文件名之间插入空格Like这个

本文关键字:之间 插入 空格 这个 Like 文件名 连接 Regex | 更新日期: 2023-09-27 18:02:10

我们正试图从SSRS报告文件名中生成外观友好的报告名称,这些名称中不能有空格,但应该可以使用正则表达式从报告名称中生成它们,以扫描大写/小写边界和字母/数字边界。然而,所有的上限都会使事情变得复杂。例如:

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

所以我认为这是最低限度的规则集;

(a-z0-9)(A-Z)       gets replaced with "$1 $2"
(A-Z)?(A-Z)(a-z)    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在处理图表上的系列名称时执行类似的操作,它从串联版本动态生成它们。

欢迎提供任何信息!:(

在C#中使用Regex在连接的文件名之间插入空格Like这个

我的解释和解决方案:

var input = "WeeklyIEEReportWC20090103SortedByDateXFoo3W3CBar4x";
var re = @"(?!^)(?:[A-Z](?:[a-z]+|(?:[A-Z'd](?![a-z]))*)|'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 = @"(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z0-9])(?=[A-Z])|(?<=[a-zA-Z])(?=[0-9])";
string value = Regex.Replace(input, p, " ");

产生Members Of IEE Team以及针对所提供的样本的CCD_ 3。