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

标签 c# regex

我们正在尝试从 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 在处理图表上的系列名称时执行类似的操作,它从连接版本动态生成它们。

感谢任何信息! :)

最佳答案

我的解读和解决方案:

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

结果:每周 IEE 报告 WC20090103 按日期排序 X Foo 3 W3C Bar 4x

关于c# - 在 C# 中使用 Regex 在 ConcatenatedFileNamesLikeThis 之间插入空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695624/

相关文章:

javascript - 范围为 8600000–9999999 的正则表达式?

提取赫斯特模式的正则表达式模式

c# - 如何删除 DataGridView 中的最后一行/页脚行?

c# - 如何使用 SocketAsyncEventArgs 对象上的缓冲区

c# - 使用 MEF 忽略构造函数异常,而 Visual Studio 不会在异常处中断

java - 查找包含某个单词而没有其他单词的行

ruby - Ruby 中的正则表达式帮助

c# - 如何识别重复的应用程序 list 证书

c# - 使用自定义格式作为引用时,如何使用 Json.NET 通过引用反序列化对象?

python - 正则表达式在python中设置组长度