Ruby,迭代字符串,匹配精确的模式并替换除第一个之外的每个模式
我的 csv 文件中有一列字符串(城市)。我需要遍历列表,迭代所有匹配模式,仅保留第一个模式,并用空行替换所有类似的模式。 我不是程序员,但如果我能做到这一点,那将对我的工作有很大帮助! 我有 Ruby 的概念和 Emacs 中正则表达式的概念。 这可行吗?有人可以帮忙吗?
先感谢您!
文件如下所示:
波尔多
波尔多
巴黎
巴黎
巴黎
Riom
文件应如下所示:
波尔多
(空白)
巴黎
(空白)
(空白)
Riom
I have a column of strings (cities) in a csv file. I'd need to go through the list, iterate through all matching patterns, keep only the first one and replace all similar ones with blank lines.
I am no programmer, but if I could do this that would help me a lot at work!
I have notions of Ruby and notions of regexp in Emacs.
Is this feasible? Can anyone help?
Thank you in advance!
File looks like this:
Bordeaux
Bordeaux
Paris
Paris
Paris
Riom
File should look like this:
Bordeaux
(blank)
Paris
(blank)
(blank)
Riom
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
保留空行:
Keeping the empty lines:
对于此类简单的任务,您还可以使用
-e
命令行参数将 ruby 脚本直接传递给解释器。如果将其与-n
或-p
结合使用,您的 ruby 脚本将依次在输入的每一行上执行。然后变量$_
保存当前正在处理的行的内容。因此,如果您的输入文件如下所示:
您可以这样执行一个简单的脚本:
For such simple tasks, you can also pass your ruby script directly to the interpreter using
-e
command line parameter. If you combine it with-n
or-p
, your ruby script will be performed on every line of the input, in turns. Variable$_
then holds the content of the line currently being processed.So, if your input file looks like this:
You can execute a simple script this way:
解决方案:
输入:
输出:
注意:最后的“Wien”后面有一个空行,但我无法让它显示在这里......
Solution:
Input:
Output:
Note: There's an empty line after the final "Wien", but I can't get it to display here...
可能最简单的方法就是使用集合(如果顺序很重要,则使用 SortedSet),
没有任何额外的东西。根据定义,集合不包含重复元素。
Probably the simpliest way is just to use a set (or SortedSet if order matters)
Nothing extra. Sets by definition do not contain duplicate elements.