2017-10-18 93 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