Skip to main content
 首页 » 编程设计

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

2025年05月04日23linjiqin

我是 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

请您参考如下方法:

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

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))