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



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

"1000  22  cc33 dfdsf"

我希望结果是

"cc33 dfdsf"

同样,如果字符串是

"7nnn 2000   388   a  4000 bbb"

我希望结果是

"a  4000 bbb"

我想"单词"只是非空格符号块。

您可以使用

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

在线观看 Ruby 演示

详情

  • G- 字符串的开始或前一场比赛的结束(因此,我们只能从字符串的开头获得连续的匹配(
  • [^[:space:]p{L}]- 不是空格和字母的字符
  • [^[:space:]]*- 0+ 非空格
  • [[:space:]]*- 0+ 空格。

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

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

/Gp{N}[[:alnum:]]*[^[:alnum:]]*/

/A(?:p{N}[[:alnum:]]*[^[:alnum:]]*)+/

其中p{N}匹配任何数字,[[:alnum:]]匹配任何字母数字,[^[:alnum:]]匹配任何非字母数字的字符。查看另一个 Ruby 演示。

此模式搜索,直到根据您的条件找到"单词"的第一个出现,然后它采用所有内容直到字符串的末尾。您可以从匹配的组中提取结果。

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

将其换成:

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

如果您需要包括线路终止符。

最新更新