2

一段时间以来,我一直在为这个问题挠头。是否可以使用单个正则表达式修改以下文本:

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

看起来像这样:

there+are+eels+in+my+hovercraft

要点是匹配days减去空格之后的内容和最后[减去之前的空格之前的内容。最重要的是,空格应替换为加号字符。我可以使用两个正则表达式来做到这一点,其中一个获得所需的文本,第二个用加号字符替换空格。但我想知道是否有一个聪明的技巧(想到环顾四周),它可以一次性完成同样的事情。

4

2 回答 2

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)
于 2013-06-03T19:56:51.767 回答
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 '+'
于 2013-06-03T20:03:33.850 回答