2014-11-20 67 views
0

我很努力弄清楚从哪里开始。我相信有一个正则表达式使得这是一个相当直接的任务。我想修剪掉字符串中多余的星号。正则表达式来清理字符串

例字符串:

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

我想它修剪星号断只不具有重复码元的末端。因此,在变量的结果值将是:

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

在Perl中,我能够用这个:

s/\*+~+/~/; 

是否有类似的东西,我可以在Ruby中做什么?我确信有,只是由于某种原因而努力寻找它。任何帮助将不胜感激。

+1

你是说'AM * BE * 3 *** LAST ****“'不应该被修剪?答案假定最后一个字符是'〜'。那是硬连线,还是最后一串askerisks后面可能跟着星号以外的任何字符? – 2014-11-20 22:29:32

回答

2

你可以使用这个表达式:

/\*+~$/ 

然后使用gsub方法带有一个波浪~更换所有比赛:

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

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

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

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

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

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

完美运作。谢谢! – MechDog 2014-11-20 22:02:54

+0

我喜欢,如果最后一个字符改变,在这种情况下,它不会因为它的行结束指示符,所以总是代字号。它是美国国会选择的“简化”公司之间的保险数据交换的ASC X12文件格式的一部分。 – MechDog 2014-11-20 22:34:59

1

您可以使用Rubular并尝试测试正则表达式,实现你所需要的基础上下来的页面的引用。

http://rubular.com/

+0

我会检查出来的,谢谢! – MechDog 2014-11-20 22:03:28

+0

好评! – 2014-11-20 22:25:52

2

Ruby的String类有[]方法,它可以让我们用正则表达式作为参数。我们也可以指定,允许我们做这样的事情:

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

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