正则表达式用于在匹配后删除一定数量的字符

时间:2013-10-14 08:55:22

标签: regex string character

我正在寻找一个简单的正则表达式,

这是输入:

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个字符。

我在这里搜索了很多问题,但没有找到解决方案,请帮助我。

3 个答案:

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

使用您选择的应用程序语言将其替换为空白以将其删除。

看起来很糟糕的表达式(?=...)是一个“向前看”,它匹配其中的正则表达式但不消耗或捕获它匹配的输入。