正则表达式来清理字符串

时间:2014-11-20 21:35:22

标签: ruby regex

我努力想弄清楚从哪里开始。我相信有一个正则表达式可以使它成为一项相当直接的任务。我想修剪一下字符串中的额外星号。

示例字符串:

test="AM*BE*3***LAST****~"

我希望仅在不具有重复符号的末端修剪星号。因此变量中的结果值为:

test="AM*BE*3***LAST~"

在Perl中,我能够使用它:

s/\*+~+/~/;

我可以在Ruby中做类似的事吗?我确信有,只是因为某些原因而努力找到它。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

/\*+~$/

然后使用gsub方法将所有匹配替换为代字号~

test = "AM*BE*3***LAST****~"

test.gsub!(/\*+~$/, '~')
# => "AM*BE*3***LAST~"

或者你可以使用这个更灵活的正则表达式,它匹配*之后的任意数量的字符,直到行尾:

/\*+([^*])+$/

然后使用第一个捕获组($1)作为替换:

test.gsub(/\*+([^*])+$/) { $1 }

答案 1 :(得分:2)

Ruby的String类有[]方法,它允许我们使用regexp作为参数。我们也可以分配给它,允许我们做以下事情:

foo = "AM*BE*3***LAST****~"
foo[/\*+~+$/] = '~'
foo # => "AM*BE*3***LAST~"

重用Perl搜索/替换中的匹配模式。 (我假设你只想在行的末尾匹配,因为你的例子。如果它需要在字符串中的任何地方删除模式中的尾随$。)

答案 2 :(得分:1)

您可以使用Rubular并尝试根据页面上的参考资料测试正则表达式并获得所需内容。

http://rubular.com/