我是正则表达式的新手。
找到一长串以 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$
"替换为"
请注意, 需要用多种语言编写为
\
。