regex - 正则表达式匹配除
问题描述
So I have these values:
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123
1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123.123.1234.12
1.232.123.3.123.214.124.1241245124.12345555.232
The idea is that all of them have a不同的长度。所以我需要匹配前5个元素之后的所有内容(我的意思是用“。”分割后产生的值)
所以我需要保留粗体文本
1.232.123.3.123。214.124.1241245124.123124124.124124.124124.123123123
1.232.123.3.123。214.124.1241245124.123124124.124124.124124.123123123.123.1234.12
1.232.123.3.123。214.124.1241245124.12345555.232
基于此,我尝试了以下
([0-9]*[.]){8}
操作:返回根(我需要删除的值)
我尝试以某种方式匹配它的其余部分,但似乎没有任何效果这个匹配最后的 n 个元素,但是这个数字是可变的,它没有太大帮助:(([.][0-9]*){3})$
我需要这样的东西:
为此我使用过,但由于末端的长度是可变的,所以我不能使用它(([.][0-9]*){7})$
有任何想法吗?
解决方案
使用此模式([0-9]*[.]){8}
可以为您提供部分匹配,因为它是未锚定的,它也可以匹配 8 个点,例如........
数字是可选的。
此模式(([.][0-9]*){3})$
匹配 3 个点,后跟可选数字,直到字符串的末尾。
您可以使用捕获组,并在匹配数字之前或之后重复点以不匹配连续点..
^(?:\d+\.){5}(\d+(?:\.\d+)*)$
^
字符串的开始(?:\d+\.){5}
重复 5 次匹配 1+ 数字后跟一个点(
捕获组 1\d+(?:\.\d+)*
匹配 1+ 位数字,并可选择重复匹配.
和 1+ 位数字
)
关闭组 1$
字符串结束
使用 Javascript 的示例
const regex = /^(?:\d+\.){5}(\d+(?:\.\d+)*)$/;
[
"1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123",
"1.232.123.3.123.214.124.1241245124.123124124.124124.124124.123123123.123.1234.12",
"1.232.123.3.123.214.124.1241245124.12345555.232",
"1.232.123.3.123",
"1.232.123.3.123.",
"1.232.123.3.123.1",
"........"
].forEach(s => {
const match = s.match(regex);
if (match) {
console.log(match[1]);
}
});
在 Java 中使用有限长度,您也可以只使用匹配,从字符串的开头向左断言 5 次重复。
(?<=^\d{1,10}\.\d{1,10}\.\d{1,10}\.\d{1,10}\.\d{1,10}\.)\d+(?:\.\d+)*$
推荐阅读
- java - 如何将临时地图合并到永久地图上,以便记录相同密钥的多个项目?
- rust - 如何在 rust 中构建多工作空间货物项目
- javascript - Firebase“Child_added”在初始读取时不返回数据
- python - 在张量流中拟合 RNN 估计器
- c# - 组件中的调用方法
- java - 汉堡菜单不显示
- angular - 如何使用 Angular 反应表单内的 mat-form-field 内的输入类型 = 数字输入/显示带有“千”逗号的值?
- azure - Azure Web 应用程序:“您无权查看此目录或页面”错误
- arrays - 搜索具有项目数组的项目等 node.js
- python - 当有很多日期时如何找到特定日期