0

我是正则表达式的新手。

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

代替:

013TheBlueCowJumpedOverTheFence1984.jpg

和:

013 The Blue Cow Jumped Over The Fence 1984

注意:删除最后的 .jpg

这将为我节省大量时间。

4

4 回答 4

1

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

string retVal = "";
foreach(char s in myInput){
    if(IsCapitol(s)){
        reVal += " " + s;
    }
    //insert the rest of your conditions
}
于 2012-12-03T15:56:42.017 回答
0

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

首先:

/(((?<![\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])))/
于 2012-12-03T15:57:59.677 回答
0

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

它会收集所有的比赛,你必须加入他们与 spases

于 2012-12-03T15:53:01.730 回答
0

匹配:

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

用。。。来代替

' \0'

请注意,这不会在 1984 年之前添加空格,也不会删除 .jpg。你可以通过匹配来做前者

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

反而。后者通过在单独的指令中删除它,例如用正则表达式替换 ' \.jpg$' 和 ''

请注意\' 需要像\\许多语言一样编写。

于 2012-12-03T15:56:02.723 回答