我努力想弄清楚从哪里开始。我相信有一个正则表达式可以使它成为一项相当直接的任务。我想修剪一下字符串中的额外星号。
示例字符串:
test="AM*BE*3***LAST****~"
我希望仅在不具有重复符号的末端修剪星号。因此变量中的结果值为:
test="AM*BE*3***LAST~"
在Perl中,我能够使用它:
s/\*+~+/~/;
我可以在Ruby中做类似的事吗?我确信有,只是因为某些原因而努力找到它。任何帮助将不胜感激。
答案 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并尝试根据页面上的参考资料测试正则表达式并获得所需内容。