2016-12-28 22 views
1

我是新來的regix。 我想從以下行只得到端口號:正則表達式 - 從字符串中提取數字。號碼應該是我輸入的前5位數字

輸入:

Install: C:\Program Files\app 
Database: postgresql://127.0.0.1:42018/app 
Started: 2016-12-28 10:40:05.908000 
Lines: 1000000 
Version: 4.1 
PID: 1736 

我試過以下的正則表達式,

[\d]{5} 

但它選擇了所有 42018,10000和90800

從以上輸入中,我只想提取端口號42018

+1

什麼是編程語言?看起來,很容易捕獲5位數字,如['postgresql:// [\ d。] +:(\ d {5})\ b'](https://regex101.com/r/QQ3TJP/1)。 –

+0

我想在java和python中做同樣的事情。截至目前我只從http://www.regexr.com/ – CMY

回答

2

您可能捕獲你需要到一個捕獲組,並與相應的代碼訪問它的價值。

爲Java和Python的正則表達式可以像

postgresql://[\d.]+:(\d+)\b 

詳細

  • postgresql:// - 一個字符串postgresql://
  • [\d.]+ - 1個或多個數字或.符號
  • : - 冒號
  • (\d+) - 組1捕獲1位或更多位
  • \b - 字邊界。

Java demo

String s = "Install: C:\\Program Files\\app\nDatabase: postgresql://127.0.0.1:42018/app\nStarted: 2016-12-28 10:40:05.908000\nLines: 1000000\nVersion: 4.1\nPID: 1736"; 
Pattern pattern = Pattern.compile("postgresql://[\\d.]+:(\\d+)\\b"); 
Matcher matcher = pattern.matcher(s); 
if (matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

Python code

import re 
s = "Install: C:\\Program Files\\app\nDatabase: postgresql://127.0.0.1:42018/app\nStarted: 2016-12-28 10:40:05.908000\nLines: 1000000\nVersion: 4.1\nPID: 1736"; 
pattern = r"postgresql://[\d.]+:(\d+)\b" 
m = re.search(pattern, s) 
if m: 
    print(m.group(1)) 
2

我不確定regex是你最好的選擇,這取決於編程語言,你可能想要使用一些庫來提取端口。

如果你仍然堅持使用正則表達式,你應該使之更加具體,例如:

postgresql:[^:]+:(\d+) 
+0

嘗試我只想選擇42018.但'postgresql:[^:] +:(\ d +)'選擇postgresql://127.0.0.1:42018 – CMY

+0

@CMY你應該只得到第一組。 – Maroun

+0

哦....謝謝 – CMY

0

的regexp檢測協議:// IPADDR:端口圖案並捕獲它的 「端口」 的一部分。 請記住,你應該使用不完整的匹配,但捕獲gruop值(如何去做 - 取決於你使用的編程語言)。

[a-z]+\:\/\/[\d]+\.[\d]+\.[\d]+\.[\d]+\:(\d+) 
1

你可以使用正則表達式:

PostgreSQL的://(\ d +?){4}(\ d +)/應用

0
\d{5}(?=\/app) 

這可能幫助給出樣本輸入。

1

如果您想在任何情況下提取每五位數字,請使用(?:^|[^\\d])[\\d]{5}(?:$|[^\\d])。不要像\上面的答案那樣使用\ b。這並不區分字母和數字的邊界,如44000e,e44000。

相關問題