regex - 查找第一个非零小数的位置

标签 regex string stata

假设我有以下本地宏:

loc a = 12.000923


我想获取第一个非零小数(在此示例中为4)的小数位。

有很多方法可以实现这一目标。一种是将a视为字符串,并找到.的位置:

loc a = 12.000923
loc b = strpos(string(`a'), ".")
di "`b'"


从这里开始,由于我得到了第一个非零元素,因此可以进一步遍历小数和计数。当然,这似乎不是一个非常优雅的方法。

您能建议一种更好的方法来解决此问题吗?正则表达式也许?

最佳答案

好吧,我不了解Stata,但是根据documentation\.(0+)?被支持,在Stata中转换这2行JavaScript函数应该不难。

它返回第一个非零小数的位置;如果没有小数,则返回-1。

function getNonZeroDecimalPosition(v) {
  var v2 = v.replace(/\.(0+)?/, "")
  return v2.length !== v.length ? v.length - v2.length : -1
}


说明


我们从输入字符串中删除一个点,后跟可选的连续零。
原始输入字符串的长度与该新字符串的长度之差给出了第一个非零小数的位置


Demo

样本片段



function getNonZeroDecimalPosition(v) {
  var v2 = v.replace(/\.(0+)?/, "")
  return v2.length !== v.length ? v.length - v2.length : -1
}

var samples = [
  "loc a = 12.00012",
  "loc b = 12",
  "loc c = 12.012",
  "loc d = 1.000012",
  "loc e = -10.00012",
  "loc f = -10.05012",
  "loc g = 0.0012"
]

samples.forEach(function(sample) {
  console.log(getNonZeroDecimalPosition(sample))
})

关于regex - 查找第一个非零小数的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479899/

相关文章:

string - R - 输入多个不带引号的字符串

python - 用到目前为止出现的次数替换字符串的每次出现

Javascript:与正则表达式或其他方式进行比较

python - 使用 Python 生成 JSON 的 C 字符串文字

r - 使用 R 中的 stringi 提取字符串中某些字符之后的多个子字符串

html - 如何检查字符串是否包含html标签最通用的方法

stata - .ado 程序中可选字符串选项的默认值

stata - 根据最近的 I/观察生成变量

javascript - 从字符串中提取公司和公司代码

python - 最Pythonic的方式来搜索文本以找到问题的答案