如何根据条件修剪Rails字符串?

时间:2017-08-07 21:07:12

标签: ruby-on-rails regex string ruby-on-rails-5

我正在使用Rails 5.如何从字符串开头删除第一个字符不是字母的所有单词(即!〜/ \ p {L} /)?所以,如果我有一个字符串

"1000  22  cc33 dfdsf"

我希望结果是

"cc33 dfdsf"

同样,如果字符串是

"7nnn 2000   388   a  4000 bbb"

我希望结果是

"a  4000 bbb"

2 个答案:

答案 0 :(得分:2)

我想"字"只是非空白符号的块。

您可以使用

BasketTotalPriceMinusLimitedTenderGross

请参阅Ruby demo online

<强>详情:

  • rx = /\G[^[:space:]\p{L}][^[:space:]]*[[:space:]]*/ puts "1000 22 cc33 dfdsf".gsub(rx, '') # => cc33 dfdsf puts "7nnn 2000 388 a 4000 bbb".gsub(rx, '') # => a 4000 bbb - 字符串的开头或上一场比赛的结束(因此,我们只从字符串的开头获得连续的匹配)
  • \G - 一个不是空格而不是字母的字符
  • [^[:space:]\p{L}] - 0+非空白
  • [^[:space:]]* - 0+空格。

您可以使用的另一个正则表达式是/\A(?:[^[:space:]\p{L}][^[:space:]]*[[:space:]]*)+/。这里,[[:space:]]*匹配字符串的开头,\A匹配上述模式的一个或多个连续出现。

注意:如果您想要专门匹配字母数字字词,也就是说,如果您要删除字符串开头的所有以字母开头的字词,您可以使用

(?:...)+

/\G\p{N}[[:alnum:]]*[^[:alnum:]]*/

其中/\A(?:\p{N}[[:alnum:]]*[^[:alnum:]]*)+/ 匹配任何数字,\p{N}匹配任何字母数字,[[:alnum:]]匹配任何不是字母数字的字符。请参阅another Ruby demo

答案 1 :(得分:0)

此模式搜索,直到找到第一个出现的&#34;字&#34;按照你的标准,然后它会把所有东西都拿到字符串的末尾。您可以从匹配的组中提取结果。

.*?\b([A-Za-z].*)

交换它:

.*?\b([A-Za-z][\s\S]*)

如果您需要包含行终止符。