匹配句子的一部分并替换该句子中的空格

时间:2013-06-03 19:28:32

标签: regex

我现在已经在这个问题上摸不着头脑了。使用单个正则表达式修改以下文本是否可能:

123456    ABC - 14 days     there are eels in my hovercraft [blablabla]

看起来像这样:

there+are+eels+in+my+hovercraft

主要点匹配days之后的任何内容减去空格以及前一[之前的任何内容减去前面的空格。最重要的是,白色空格应替换为加号字符。我可以使用两个正则表达式来完成此操作,其中一个获取所需的文本,第二个使用加号字符替换空格。但我想知道是否有一个聪明的伎俩(想到了解释),它可以一次完成同样的事情。

2 个答案:

答案 0 :(得分:2)

最简单且可能最有效的方法是使用两个正则表达式,但是如果您使用的语言允许使用函数作为替换,则可以通过一次调用执行此操作。例如,使用Javascript:

var s = '123456    ABC - 14 days     there are eels in my hovercraft [blablabla]'
var regex = /^.*days *| \[.*$|( )/g;
var result = s.replace(regex, function (match, p1) {
    return p1 ? '+' : '';
});

示例:http://jsfiddle.net/5fsEA/

使用Python的相同方法:

import re
s = '123456    ABC - 14 days     there are eels in my hovercraft [blablabla]'
result = re.sub(r'^.*days *| \[.*$|( )', lambda m: '+' if m.group(1) else '', s)

答案 1 :(得分:0)

这可以通过两个步骤完成:(1)使用正则表达式匹配来隔离所需的文本; (2)在正则表达式替换操作中使用#1的输出。

这是python中的一个例子:

import re
line = "123456    ABC - 14 days     there are eels in my hovercraft [blablabla]"
m = re.match("^.*days\s+(.+)\s+\[.*$", line)   # this gives us "there are eels in my hovercraft"
print re.sub('\s+', '+', m.group(1))  # this substitutes white spaces with '+'