正则表达式 - 从字符串中提取数字。数字应该是我输入的前 5 位数字
regex - Extract number from string. Number should be first 5 digit from my input
我是 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
我不确定正则表达式是否是您的最佳选择,具体取决于编程语言,您可能希望使用某些库提取端口。
如果你还是坚持要用正则表达式,你应该把它说得更具体一些,例如:
postgresql:[^:]+:(\d+)
您可以捕获您需要的值到捕获组中,并使用相应的代码访问它。
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));
}
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))
regexp 检测 protocol://ipaddr:port 模式并捕获其中的 "port" 部分。
请记住,您不应使用整体匹配,而应使用捕获组值(如何操作 - 取决于您使用的编程语言)。
[a-z]+\:\/\/[\d]+\.[\d]+\.[\d]+\.[\d]+\:(\d+)
您可以使用正则表达式:
postgresql://(\d+.?){4}:(\d+)/app
\d{5}(?=\/app)
这可能有助于给定示例输入。
如果您想在任何情况下都提取每五位数字,请使用 (?:^|[^\d])[\d]{5}(?:$|[^\d])
。不要像上面的答案那样使用 \b 。这不区分字母和数字的边界,如44000e、e44000。
我是 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
我不确定正则表达式是否是您的最佳选择,具体取决于编程语言,您可能希望使用某些库提取端口。
如果你还是坚持要用正则表达式,你应该把它说得更具体一些,例如:
postgresql:[^:]+:(\d+)
您可以捕获您需要的值到捕获组中,并使用相应的代码访问它。
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));
}
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))
regexp 检测 protocol://ipaddr:port 模式并捕获其中的 "port" 部分。 请记住,您不应使用整体匹配,而应使用捕获组值(如何操作 - 取决于您使用的编程语言)。
[a-z]+\:\/\/[\d]+\.[\d]+\.[\d]+\.[\d]+\:(\d+)
您可以使用正则表达式:
postgresql://(\d+.?){4}:(\d+)/app
\d{5}(?=\/app)
这可能有助于给定示例输入。
如果您想在任何情况下都提取每五位数字,请使用 (?:^|[^\d])[\d]{5}(?:$|[^\d])
。不要像上面的答案那样使用 \b 。这不区分字母和数字的边界,如44000e、e44000。