我现在已经在这个问题上摸不着头脑了。使用单个正则表达式修改以下文本是否可能:
123456 ABC - 14 days there are eels in my hovercraft [blablabla]
看起来像这样:
there+are+eels+in+my+hovercraft
主要点匹配days
之后的任何内容减去空格以及前一[
之前的任何内容减去前面的空格。最重要的是,白色空格应替换为加号字符。我可以使用两个正则表达式来完成此操作,其中一个获取所需的文本,第二个使用加号字符替换空格。但我想知道是否有一个聪明的伎俩(想到了解释),它可以一次完成同样的事情。
答案 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 ? '+' : '';
});
使用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 '+'