其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

在Go正则表达式中分割浮点字符串

GG网络技术分享 2025-03-18 16:14 0


问题描述:

I\'m, trying to split a certain string type to its constituents using Golang\'s regex.

What I have is a Sprinf(\".2f\", n) of any given float (to simplify it to 2 decimal places), and would wish to separate the hundredths digit like:

\"1.25\" = [\"1.2\", \"5\"]

\"1.99\" = [\"1.9\", \"9\"]

In PHP, this is something like:

preg_match(\'/^ (\\-? \\d [.] \\d) (\\d) $/x\', sprintf(\'%1.2f\', $input), $matches)

and I can get the parts via $matches[0] and $matches[1].

Tried it with :

re := regexp.MustCompile(`/^ (\\-? \\d [.] \\d) (\\d) $/x`)

fmt.Printf(\"%q

\", re.FindAllStringSubmatch(\"1.50\", 2))

to no avail. Thanks in advance.

图片转代码服务由CSDN问答提供

感谢您的意见,我们尽快改进~

功能建议

我正在尝试使用Golang的正则表达式将某种字符串类型拆分为其组成部分。</ p>

我所拥有的是任何给定浮点数的 Sprinf(“。2f”,n)</ code>(将其简化为2个小数位),并且希望将百分位数分开,例如: </ p>

 “ 1.25” = [“ 1.2”,“ 5”] 

“ 1.99” = [“ 1.9”,“ 9”]

</ code> </ pre>

在PHP中,类似于:</ p>

  preg_match(\'/ ^(\\-?\\ d [。] \\ d)(\\  d)$ / x\',sprintf(\'%1.2f\',$ input),$ matches)

</ code> </ pre>

,我可以通过$ matches [0 ]和$ matches [1]。</ p>

尝试过:</ p>

  re:= regexp.MustCompile(`/ ^(\\-  ?\\ d [。] \\ d)(\\ d)$ / x`)

fmt.Printf(“%q

”,re.FindAllStringSubmatch(“ 1.50”,2))

</ code> </ pre >

无济于事。 预先感谢。</ p>

</ div>

网友观点:

Why do you need regexp for this? Simply slice the string:

func split(s string) []string {

if len(s) == 0 {

return nil

}

return []string{s[:len(s)-1], s[len(s)-1:]}

}

Testing it:

nums := []string{

fmt.Sprintf(\\\"%.2f\\\", 1.25),

fmt.Sprintf(\\\"%.2f\\\", 1.99),

fmt.Sprintf(\\\"%.2f\\\", 1.25),

fmt.Sprintf(\\\"%.2f\\\", 1.2),

fmt.Sprintf(\\\"%.2f\\\", 0.0),

fmt.Sprintf(\\\"%.2f\\\", -1.2),

\\\"\\\",

}

for _, n := range nums {

fmt.Printf(\\\"%q = %q

\\\", n, split(n))

}

Output (try it on the Go Playground):

\\\"1.25\\\" = [\\\"1.2\\\" \\\"5\\\"]

\\\"1.99\\\" = [\\\"1.9\\\" \\\"9\\\"]

\\\"1.25\\\" = [\\\"1.2\\\" \\\"5\\\"]

\\\"1.20\\\" = [\\\"1.2\\\" \\\"0\\\"]

\\\"0.00\\\" = [\\\"0.0\\\" \\\"0\\\"]

\\\"-1.20\\\" = [\\\"-1.2\\\" \\\"0\\\"]

\\\"\\\" = []

golang2021函数与包(64)正则表达式教程

正则表达式(Regular

Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。

许多程序设计语言都支持利用正则表达式进行字符串操作。

除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。

例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。像 data(\\w)?\\.dat 这样的模式将查找下列文件:

data.dat
data1.dat
data2.dat
datax.dat
dataN.dat

使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\\.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat

dataXYZ.dat

尽管这种搜索方法很有用,但它还是有限的。通过理解 *

通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

正则表达式的使用,可以通过简单的办法来实现强大的功能。下面先给出一个简单的示例:

  • ^ 为匹配输入字符串的开始位置。

  • [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。

  • abc$匹配字母 abc 并以 abc 结尾,$

    为匹配输入字符串的结束位置。

  • 我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符(-),并设置用户名的长度,我们就可以使用以下正则表达式来设定。

    以上的正则表达式可以匹配 yincheng、yincheng1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3

    个无法匹配。也不匹配 yincheng$, 因为它包含特殊字符。

    为什么使用正则表达式?

    典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

    通过使用正则表达式,可以:

  • 测试字符串内的模式。
    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

  • 替换文本。
    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

  • 基于模式匹配从字符串中提取子字符串。

    可以查找文档内或输入域内特定的文本。

  • 例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML

    格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML

    格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。


    标签:

    提交需求或反馈

    Demand feedback