丢弃第二个小数点后字符串变量中的所有内容
Discarding everything in a string variable after the second decimal
我有一个 Ruby 字符串变量,其值为 1.14.2.ab3-4.dl0.rhel
但是,我想丢弃小数点后第二位的所有内容,以便获得 1.14
的值
我正在使用以下命令:
str.split(".")[0]
但是好像不行
当您在字符串上按 .
拆分时,您会得到:
['1', '14', '2', 'ab3-4', 'dl0', 'rhel']
从这里你可以得到前两个由句点连接的项目:
str.split(".")[0..1].join(".")
# or
str.split(".").first(2).join(".")
使用正则表达式,您可以只查找第一个带 2 位小数的数字:
"1.14.2.ab3-4.dl0.rhel"[/\d+\.\d{2}/]
#=> "1.14"
@maxple 的答案仅在感兴趣的子字符串位于字符串的开头时才有效。由于这不是规范的一部分(仅在示例中),我认为这不是一个合理的假设。 (@Eric 没有做出那个假设。)
你的说法也有歧义,"discard everything after the second decimal"。 @maxple 将其解释为在第二个小数点之后(但也丢弃了第二个小数点),而@Eric 认为它意味着在第二个小数点之后。这就是当问题不精确时会发生的情况。
如果子字符串位于字符串的开头,并且您打算舍弃第二个小数点和后面的所有内容,这里有两种方法可以做到这一点。
str = "1.14.2.ab3-4.dl0.rhel"
1.修改@Eric 的正则表达式:
str[/\A\d+\.\d+/]
#=> "1.14"
2。将字符串转换为浮点数,然后再转换回字符串:
str.to_f.to_s
#=> "1.14"
#1 returns nil
如果所需的子字符串不存在,而 #2 returns "0.0"
.只要 "0.0"
不是有效的子串,就可以使用其中任何一个来确定子串是否存在,如果存在,则 return 子串。
你也可以在String中使用分区方法:https://ruby-doc.org/core-2.2.0/String.html#method-i-partition
"1.14.2.ab3-4.dl0.rhel".partition(/\d+\.\d{2}/)[1]
=> "1.14"
我有一个 Ruby 字符串变量,其值为 1.14.2.ab3-4.dl0.rhel
但是,我想丢弃小数点后第二位的所有内容,以便获得 1.14
我正在使用以下命令:
str.split(".")[0]
但是好像不行
当您在字符串上按 .
拆分时,您会得到:
['1', '14', '2', 'ab3-4', 'dl0', 'rhel']
从这里你可以得到前两个由句点连接的项目:
str.split(".")[0..1].join(".")
# or
str.split(".").first(2).join(".")
使用正则表达式,您可以只查找第一个带 2 位小数的数字:
"1.14.2.ab3-4.dl0.rhel"[/\d+\.\d{2}/]
#=> "1.14"
@maxple 的答案仅在感兴趣的子字符串位于字符串的开头时才有效。由于这不是规范的一部分(仅在示例中),我认为这不是一个合理的假设。 (@Eric 没有做出那个假设。)
你的说法也有歧义,"discard everything after the second decimal"。 @maxple 将其解释为在第二个小数点之后(但也丢弃了第二个小数点),而@Eric 认为它意味着在第二个小数点之后。这就是当问题不精确时会发生的情况。
如果子字符串位于字符串的开头,并且您打算舍弃第二个小数点和后面的所有内容,这里有两种方法可以做到这一点。
str = "1.14.2.ab3-4.dl0.rhel"
1.修改@Eric 的正则表达式:
str[/\A\d+\.\d+/]
#=> "1.14"
2。将字符串转换为浮点数,然后再转换回字符串:
str.to_f.to_s
#=> "1.14"
#1 returns nil
如果所需的子字符串不存在,而 #2 returns "0.0"
.只要 "0.0"
不是有效的子串,就可以使用其中任何一个来确定子串是否存在,如果存在,则 return 子串。
你也可以在String中使用分区方法:https://ruby-doc.org/core-2.2.0/String.html#method-i-partition
"1.14.2.ab3-4.dl0.rhel".partition(/\d+\.\d{2}/)[1]
=> "1.14"