1

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

这是输入:

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,即在文本之前删除 8 个字符.jpg 。每个图像的宽度和高度会有所不同。所以我想在匹配后搜索文本.jpg,删除它之前的 8 个字符。

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

4

3 回答 3

5

你只需要定义你想要匹配的模式,这并不难。让我们一步一步来。

  • 它以“-”开头,在正则表达式中也是如此。

  • 然后是一系列数字,中间有一个“x”。创建一个字符类 [\dx],其中是一个数字,并使用量词\d匹配这个或多次。+

    当数字多于或少于 3 位时,这样做会使其更加灵活,因此它也会替换诸如“-1600x1200”或“-64x48”之类的东西。

    如果您想对模式更严格,请执行类似的操作\d{2,4}x\d{2,4},它只匹配 2 到 4 位数字,然后是“x”,然后是 2 到 4 位数字。

  • 将“.jpg”与\.jpg. 需要转义,.因为它是正则表达式中的特殊字符

这导致

-[\dx]+\.jpg

然后用“.jpg”替换它

在 Regexr 上查看

于 2013-10-14T09:17:33.910 回答
1

在不知道您使用的语言并遵循您想要做的事情的情况下,我会提出以下正则表达式:

^(.*).{8}(\.jpg.*)$

$1$2作为替换字符串。

这将根据您的需要简单地删除每个 .jpg 前面的 8 个字符。

如果您想在宽度/高度数字方面更加灵活,您还可以使用:

^(.*)-[^-]+(\.jpg.*)$

这基本上会寻找-(包括)和.jpg

于 2013-10-14T09:13:45.383 回答
0

此正则表达式匹配文本“.jpg”之前的 8 个字符:

.{8}(?=\.jpg)

如果您不确定有多少个字符,这将匹配任意数量的字符,包括“.jpg”之前的最后一个连字符:

-[^-]*(?=\.jpg)

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

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

于 2013-10-14T09:12:08.790 回答