我想从初始字符串中删除所有捕获的元素。例如,给定字符串
https://item.taobao.com/item.htm?spm=a230r.1.999.1.11cf523cXZ0Yh3&id=564725808226&ns=1#detail
,
我想要以下
item.taobao.com/item.html?id=564725808226
我有以下正则表达式(https:\/\/)|(spm=.*&(?=id))|(&ns=.*)
,其行为如下:http://rubular.com/r/hp6xgB6pJ4
Match 1
1. https://
2.
3.
Match 2
1.
2. spm=a230r.1.999.1.11cf523cXZ0Yh3&
3.
Match 3
1.
2.
3. &ns=1#detail
问题是,我对它并不真正满意,因为如您所见,它产生三个一组,三个一组,其中的一些字段为空,并且对每个匹配组执行字符串操作并不方便
有没有一种方法可以将所有“匹配项”聚集到一组匹配项中,因此输出看起来就像
Match1
1. https://
2. spm=a230r.1.999.1.11cf523cXZ0Yh3&
3. &ns=1#detail
答案 0 :(得分:0)
正如评论所告诉您的,您已经可以用空字符串替换不需要的内容,但是如果您想根据需要减少匹配次数,可以使用:
(https:\/\/).*?(spm=.*?&(?=id)).*?(&ns=.*)
。然后只需替换组即可。选中http://rubular.com/r/mysRxjeiin
您的群组将是:
1. https://
2. spm=a230r.1.999.1.11cf523cXZ0Yh3&
3. &ns=1#detail
答案 1 :(得分:0)
我有以下
https:\/\/([\w\W.]+\/[\w\W.]+[?]).*(id=\d+)
尽管如此,您必须手动组合第1组和第2组比赛
Full match 0-81 `https://item.taobao.com/item.htm?spm=a230r.1.999.1.11cf523cXZ0Yh3&id=564725808226`
Group 1. 8-33 `item.taobao.com/item.htm?`
Group 2. 65-81 `id=564725808226`