我正在寻找一个简单的正则表达式,
这是输入:
This is a sample text www.testdomainname.com/picsinsideit/stunningpictureofkays1381737242g8k4n-280x428.jpg this is also sample text
输出:
This is a sample text www.testdomainname.com/picsinsideit/stunningpictureofkays1381737242g8k4n.jpg this is also sample text
我想删除文字-280x428
,即在文字.jpg
之前删除8个字符
每个图像的宽度和高度都不同。所以我希望在匹配后搜索文本.jpg
,然后删除之前的8个字符。
我在这里搜索了很多问题,但没有找到解决方案,请帮助我。
答案 0 :(得分:5)
您只需要定义要匹配的模式,这并不困难。让我们一步一步来做。
它以“ - ”开头,在正则表达式中也是如此。
然后有一系列数字,中间有一个“x”。创建character class [\dx]
,其中\d
是一个数字,并使用+
quantifier与此匹配一次或多次。
当数字大于或等于3位数时,这样做会使其更加灵活,因此它也会替换“-1600x1200”或“-64x48”之类的内容。
如果你想对模式更加严格,那么做\d{2,4}x\d{2,4}
之类的东西,只能匹配2到4位数后跟一个“x”,然后是2到4位。
将“.jpg”与\.jpg
匹配。 .
需要转义,因为它是正则表达式中的special character。
这导致
-[\dx]+\.jpg
然后将其替换为“.jpg”
请参阅it on Regexr
答案 1 :(得分:1)
在不知道您使用的语言并遵循您想要做的事情的情况下,我会提出以下正则表达式:
^(.*).{8}(\.jpg.*)$
$1$2
作为替换字符串。
这将只删除每个.jpg前面的8个字符。
如果您希望在宽度/高度数方面更加灵活,您还可以使用:
^(.*)-[^-]+(\.jpg.*)$
这基本上会查找-
(包括)和.jpg
答案 2 :(得分:0)
此正则表达式匹配文本“.jpg”之前的8个字符:
.{8}(?=\.jpg)
如果您不确定有多少个字符,则匹配任意数量的字符,包括“.jpg”之前的最后一个字符:
-[^-]*(?=\.jpg)
使用您选择的应用程序语言将其替换为空白以将其删除。
看起来很糟糕的表达式(?=...)
是一个“向前看”,它匹配其中的正则表达式但不消耗或捕获它匹配的输入。