正则表达式 - 从字符串中提取数字。数字应该是我输入的前5位数

时间:2016-12-28 09:41:30

标签: java python regex

我是regix的新手。 我想从以下行获得唯一的端口号:

输入:

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

6 个答案:

答案 0 :(得分:2)

我不确定正则表达式是否是您的最佳选择,具体取决于编程语言,您可能需要使用某些库来提取端口。

如果你仍然坚持使用正则表达式,你应该使它更具体,例如:

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

答案 1 :(得分:2)

您可以捕获所需的值到捕获组中并使用相应的代码访问它。

Java和Python的正则表达式看起来像

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

<强>详情:

  • postgresql:// - 文字字符串postgresql://
  • [\d.]+ - 一个或多个数字或.符号
  • : - 冒号
  • (\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 :(得分:1)

您可以使用正则表达式:

  

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

答案 3 :(得分:1)

如果要在任何情况下提取每五位数字,请使用(?:^|[^\\d])[\\d]{5}(?:$|[^\\d])。不要像上面的答案一样使用\ b。这不区分字母的边界和44000e,e44000之类的数字。

答案 4 :(得分:0)

regexp检测协议:// ipaddr:端口模式和捕获&#34;端口&#34;一部分。 请记住,你应该使用不完全匹配但捕获gruop值(如何做 - 取决于你使用的编程语言)。

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

答案 5 :(得分:0)

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

这可能有助于提供样本输入。