2017-10-18 102 views
1

所以我有这样的事情:获取数字的正则表达式

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

bla bla bla。 (1234,5678,012)

我想要得到的第一个数字,即(和,&之间的数字无需在一个正则表达式中同时逗号,然后获得另一个正则表达式中的第二个数字没有得到第一,因此第一“和第二个”

我试过之间做到以下几点来获得的第一个,但甚至没有利用空间:

^\(\d*,$ 

我甚至试过这个:

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

这:

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

我这里测试它:https://regex101.com/,我不断收到敌不过某种原因

我试图使用Go语言

+1

很容易与编程语言 – RomanPerekhrest

+0

['(?:\(| \ G *,*)\ K( \ d +)(?= [,\ d] * \))'](https://regex101.com/r/HNW0Gf/2)? – ctwheels

+0

那么,你想得到多少组数字,2? ('1234','5678',012) – sln

回答

1

first regex的是

\(\s*(\d+) 

详细

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

而且second one

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

同上(与周围的第一数字匹配图案的除去捕获组),但\s*,\s*(\d+)加入:

  • \s*,\s* - 封闭与, 0+空格
  • (\d+) - 组1:一个或多个数字

Go playground demo

包主要

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 
+0

谢谢。这对于两者都是完美的:) – rullzing

+0

当然。你说对了 :) – rullzing

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+)命名组中的至少一个整数

,文字逗号

0

既然你没有指定编程语言或您希望您的输出,很难给出一个明确的答案,但这里是我认为可能有些正则表达式做你的追求。

如果这些都是您正在寻找的内容,则无需了解您所需的语言即可实施它们。

+0

(\ s *(\ d +)\ s *,。*)这是唯一有效的工作。并且它正确地检索了第一组。语言为什么重要? – rullzing