我是正则表达式的新手。
什么表达式可以找到一长串以 3 位数字开头并在大写单词开头放置空格的单词:
代替:
013TheBlueCowJumpedOverTheFence1984.jpg
和:
013 The Blue Cow Jumped Over The Fence 1984
注意:删除最后的 .jpg
这将为我节省大量时间。
我是正则表达式的新手。
什么表达式可以找到一长串以 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])\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])))/
尝试使用这个正则表达式\d+|[A-Z][a-z]*
它会收集所有的比赛,你必须加入他们与 spases
匹配:
'[A-Z][a-z]*'
用。。。来代替
' \0'
请注意,这不会在 1984 年之前添加空格,也不会删除 .jpg。你可以通过匹配来做前者
'[0-9]+|[A-Z][a-z]*'
反而。后者通过在单独的指令中删除它,例如用正则表达式替换 ' \.jpg$
' 和 ''
请注意\
' 需要像\\
许多语言一样编写。