[英]Capturing arbitrary numbers of trailing digits
我有一些电子表格,人们写了 13.14 (例如),其中小数点是分隔符而不是数字 - 即最好写13,14
或13-14
。 在 Excel 和read_excel
之间,这可以转换为13.140000000000001
或9.1699999999999999
或13.279999999999999
类的东西。 我需要砍掉9
s(并将数字向上取整)或0..01
s,我认为正则表达式如下:
^(.*)0{3,}[12]$
可能有效,但它所做的只是捕获三个尾随的 0 和 1。类似地
^(.*)9{3,}$
没有捕捉到所有的 9。 我可以准确地指定 0 模式(13 x 0 + 1),但 9 更棘手,因为它们可能有 13 或 14 个。
正则表达式在这里不是正确的工具。 您将无法四舍五入,而您目前无法匹配“129999”之类的内容。 您需要将它们解释为一个数字,而不是一个字符序列。
事实证明,这个技巧更具体地说明了我想要保留的数字。 我使用负前瞻来确保我只处理“可能的”数字,即我想要 1、2、3、..、10、11 等,但我不想要 09。 零的正则表达式是
^(([1-9](?!0)|[12][0-9])\\.([1-9](?!0)|[12][0-9]))0{3,}[12]$
和
^(([1-9](?!0)|[12][0-9])\\.([1-9](?!0)|[12][0-9]))9{3,}$
请注意,这是针对 R,所以.
是双重转义的,在其他语言中不会。
通过捕获清理后的数字、将第二个数字增加 1 并将它们连接起来来处理舍入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.