查找并替换一长串单词的正则表达式



我是正则表达式的新手。

找到一长串以 3 位数字开头并在大写单词开头放置空格的表达式是什么:

取代:

013TheBlueCowJumpedOverTheFence1984.jpg

跟:

013 The Blue Cow Jumped Over The Fence 1984

注意:删除末尾的.jpg

这将为我节省很多时间。

我不会为此任务使用正则表达式。这将是丑陋且难以维护的。 更好的方法是遍历字符串,并根据您的输入随时重建字符串。

string retVal = "";
foreach(char s in myInput){
    if(IsCapitol(s)){
        reVal += " " + s;
    }
    //insert the rest of your conditions
}

请尝试使用此正则表达式d+|[A-Z][a-z]*

它将收集所有匹配项,您必须通过痉挛加入它们

这将需要两个操作,因为每个操作的替换都不同。

第一个:

/(((?<![d])d)|((?<![A-Z])[A-Z](?![A-Z])))/

替换为:' $1'(注意空格)

将在单词之间放置空格。第二种:

/s*(.*)s*..*$/

替换为:'$1'

将删除尾随空格和扩展名。

第一个表达式可以分为几部分:(?<![d])d查找一个前面没有另一个数字的数字,第二个表达式:((?<![A-Z])[A-Z](?![A-Z]))查找一个前后没有大写字母的大写字母。

您可能希望将更多规则合并到其中,例如如何处理字符串:'BackInTheUSSR.jpg'

编辑:这应该处理该示例:

/(((?<![d])d)|((?<![A-Z])[A-Z](?![A-Z]))|((?<![A-Z])[A-Z]+(?![a-z])))/

匹配:

'[A-Z][a-z]*'

替换为

' '

请注意,这不会在 1984 年之前放置空格,也不会删除.jpg。您可以通过匹配来执行前者

'[0-9]+|[A-Z][a-z]*'

相反。后者通过在单独的指令中删除它,例如用正则表达式将" .jpg$ "替换为"

请注意, 需要用多种语言编写为\

最新更新