正则表达式,用于查找和替换长字符串

时间:2012-12-03 15:45:38

标签: regex insert whitespace

我是正则表达式的新手。

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

REPLACE:

013TheBlueCowJumpedOverTheFence1984.jpg

使用:

013 The Blue Cow Jumped Over The Fence 1984

注意:删除末尾的.jpg

这将节省我的时间。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

它将收集所有匹配项,您必须使用spases

加入它们

答案 2 :(得分:0)

匹配

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

替换为

' \0'

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

来完成前者
'[0-9]+|[A-Z][a-z]*'

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

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

答案 3 :(得分: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])))/