gpt4 book ai didi

ruby 正则表达式 : efficient way of capturing and deleting simultaneously

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:30 24 4
gpt4 key购买 nike

我正在使用 ruby​​ 中的正则表达式从代码文件中删除注释。代码是 C++(但我认为这不相关)并且文件包含类似以下内容:

/*
Hello! I'm a comment!
*/

int main(int argc, char* argv[])
{
Foo foo;
foo.bar();
return 0;
}

我的目标是从代码中删除注释,同时解析它们,目前我可以通过捕获然后删除来实现:

text.scan(UGLY_COMMENTS_REGEX).each do |m|
m.method_for_printing_matched_comment
end
text = text.gsub(UGLY_COMMENTS_REGEX,'');

我想到的另一种选择是为每个正则表达式匹配执行 gsub,而不是使用完整的正则表达式,例如:

text.scan(UGLY_COMMENTS_REGEX).each do |m|
m.method_for_printing_matched_comment
text = text.gsub(m,'');
end

这个(也是次优的)替代方案的问题在于,当匹配包含“组”时,它并不简单,例如 m[0]、m[1]...

这样做似乎效率极低,我想知道是否有任何方法可以只进行一次匹配(用于捕获和删除)。

最佳答案

String#gsub! (和其他 String#gsubString#sub!String#sub)接受一个可选 block (将用匹配的字符串调用) ).所以你可以这样做:

text.gsub!(UGLY_COMMENTS_REGEX) { |m|
puts m # to print the matched comment / OR m.method_for_printing_matched_comment
'' # Return value is used as a replacement string; effectively remove the comment
}

关于 ruby 正则表达式 : efficient way of capturing and deleting simultaneously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com