用于获取数字的正则表达式

时间:2017-10-18 18:40:21

标签: regex go

所以我有这样的事情:

字符串。 (numbers1,number2,numbers3) 所以像这样:

bla bla bla。 (1234,5678,012)

我想得到第一个数字,即(和,并且在一个正则表达式中同时忽略逗号之前的空格,然后在另一个正则表达式中得到第二个数字而不是第一个数字之间的数字)第一个'第二个'

我已尝试执行以下操作以获得第一个但即使有空间也无法工作:

^\(\d*,$

我甚至试过这个:

^.*?\([^\d]*(\d+)[^\d]*\).*$

而且:

\[\((\d+)\).*?\]

我在这里测试它:https://regex101.com/并且由于某种原因我一直没有匹配

我尝试使用Go语言

来实现它

3 个答案:

答案 0 :(得分:1)

first regex

\(\s*(\d+)

<强>详情

  • \( - (
  • \s* - 0+ whitespaces
  • (\d+) - 第1组:一个或多个数字

second one

\(\s*\d+\s*,\s*(\d+)

与上面相同(在第一个数字匹配模式周围删除了捕获组),但添加了\s*,\s*(\d+)

  • \s*,\s* - 包含0 +空格的,
  • (\d+) - 第1组:一个或多个数字

Go playground demo

package main

import (
    "regexp"
    "fmt"
)

func main() {
    var str = `bla bla bla . (1234 , 5678 , 012)`
    var re = regexp.MustCompile(`\(\s*(\d+)`)

    match := re.FindStringSubmatch(str)
    fmt.Println(match[1])

    var re2 = regexp.MustCompile(`\(\s*\d+\s*,\s*(\d+)`)
    match2 := re2.FindStringSubmatch(str)
    fmt.Println(match2[1])
}

结果:

1234
5678

答案 1 :(得分:0)

您可以使用单个正则表达式和命名组获得所需的所有内容:

例如使用python re模块:

import re

CUSTOM_REGEXP = r".+\.\s{0,}\((?P<first>\d+)\s{0,},\s{0,}(?P<second>\d+)\s{0,},\s{0,}(?P<third>\d+)\)"
match = re.match(CUSTOM_REGEXP, "bla bla bla.(1234 , 5678 , 012)"
m.group("first")  # 1234
m.group("second") # 5678
m.group("third")  # 012

按部分:

.+任何字符至少重复一次

\.字面点

\s{0,}可选空间

\(字面括号

(?P<first>\d+)至少有一个整数的命名组

,文字逗号

答案 2 :(得分:0)

由于您没有指定编程语言或者您希望如何输出,因此很难给出具体的答案,但这里有一些正则表达式,我认为可能就是您所追求的。

如果您正在寻找这些中的任何一个,那么您可以在不知道所需语言的情况下实施它们。